使用weak修饰只读属性?

5

应该使用哪个:

@property (nonatomic, weak, readonly)

还是

@property (nonatomic, readonly)

弱引用具有在实例被解除分配时将其置空的优点,但是只读属性是否暗示着弱引用?如果想使用弱引用行为,是否应该明确声明一个属性为弱引用?

2个回答

5
如果您想保留一个指向您不拥有的对象的指针,但希望它只在存在期间有效,那么您需要使用弱引用。因为当所有者对其进行销毁时,您的指针将自动设置为nil,并且不会指向不应该存在的内存。
这两个都有不同的含义,无论是弱引用还是强引用,只读都没有任何区别。
@property (nonatomic, weak, readonly)
@property (nonatomic, readonly)

您还可以在这里找到一些参考。

您也可以在此处查找相关参考信息。

3
补充 @AnoopVaidya 的回答,readonly 关键字表示告诉编译器只生成 getter 而不生成 setter。如果你试图直接更改该属性,它还会给出一个友好的警告。 - JiuJitsuCoder

2

弱引用或者强引用并不意味着只读或者可写。它们之间没有必然的联系。

强引用会拥有对象,而弱引用则不会,但是在相关对象被删除时,弱引用会接收到被置空的服务。

只读属性会禁止设置器(据我所知)。该属性无法从其类外部更改。可写属性(如果未声明,则为默认值)允许更改属性。

基本上就是这样了。这两个设置之间没有任何关联。它们可以以所有可能的组合方式工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接