委托属性声明中'weak'和'assign'之间的区别是什么

时间:2012-02-24 09:40:54

标签: objective-c ios ios5 delegates properties

这有什么区别:

@property (nonatomic, weak) id  <SubClassDelegate> delegate; 

和此:

@property (nonatomic, assign) id  <SubClassDelegate> delegate; 

我想为代表使用属性。

1 个答案:

答案 0 :(得分:149)

weakassign之间的唯一区别是,如果weak属性指向的对象被解除分配,则weak指针的值将设置为nil,以免您冒险访问垃圾。如果您使用assign,则不会发生这种情况,因此如果对象从您下面取消分配并且您尝试访问它,则会访问垃圾。

对于Objective-C对象,如果您处于可以使用weak的环境中,那么您应该使用它。