• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 为只读对象的属性赋值

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:48:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有 2 个类如下:

类 ModelA.h

@interface ModelA : NSObject
   @property (nonatomic, strong) NSArray *arrayA;
@end

类 ControllerA.m

@interface ControllerA()
    @ property (nonatomic, copy, readonly) ModelA *modelProperty;
@end

@implementation ControllerA

- (void)someMethodNSArray *)sampleArray
{
    self.modelProperty.arrayA = sampleArray;
}

如果我尝试为 self.modelProperty 分配一些东西,我会收到一个构建错误,说我不能,因为它是一个只读属性。但是我为其属性分配了一些东西,它 XCode 没有给出任何错误,即 self.modelProperty.arrayA = sampleArray 构建得很好。但是,当我通过它进行调试并打印 self.modelProperty.arrayA 时,即使 sampleArray 中有数据,我也会得到 nil。

问题:是否可以为只读对象的属性赋值?



Best Answer-推荐答案


Is it possible to assign values to a property of a readonly object?

呃,有点。您使用的语言有点困惑。它不是一个只读对象;这是一个只读属性。并且可以为存储在只读属性中的对象赋值。

readonly 只是意味着你不能设置那个属性——没有 setModelProperty: setter 方法。

意味着对象的目标是不可变的。它与 const 不同。这意味着你不能设置属性。

您看到 nil 的原因是 发送到 nil 的任何消息都返回 nil。 p>

self.modelProperty.arrayA

等同于:

[[self modelProperty] arrayA]

如果 modelPropertynil (从您显示的代码来看,它是),这与:

[nil arrayA]

返回 nil -- 与 [nil anyMethod] 返回 nil 的方式相同。


最后说明:您已将 copy 设置为 modelProperty 属性的内存策略,但 ModalA 类似乎没有实现NSCopying 协议(protocol)。你确定不想要 strong 吗?

关于ios - 为只读对象的属性赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23248891/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap