我有 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-推荐答案 strong>
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]
如果 modelProperty 是 nil (从您显示的代码来看,它是),这与:
[nil arrayA]
返回 nil -- 与 [nil anyMethod] 返回 nil 的方式相同。
最后说明:您已将 copy 设置为 modelProperty 属性的内存策略,但 ModalA 类似乎没有实现NSCopying 协议(protocol)。你确定不想要 strong 吗?
关于ios - 为只读对象的属性赋值,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/23248891/
|