2012-02-24 88 views
82

“弱”和“分配”之间的区别请告诉我这之间的区别:和是什么在委托财产申报

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

这样的:

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

我想使用属性为代表。

回答

145

weakassign之间的唯一区别是,如果要被释放的对象weak属性点,那么weak指针的值将被设置为nil,让你永远不会运行访问垃圾的危险。如果您使用assign,则不会发生这种情况,因此如果该对象从您的下方解除分配,并且您尝试访问它,则将访问垃圾。

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

+16

你知道为什么一些Cocoa Touch框架类仍然在为代表使用assign吗?例如,[UISearchDisplayController]的代表(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchDisplayController_Class/Reference/Reference.html#//apple_ref/occ/instp/UISearchDisplayController/delegate)仍然分配。为什么不更新? – Pwner 2014-02-07 19:26:48

+0

@Pwner看起来像它已被弃用在iOS 8.0 – Stavash 2015-03-01 20:25:31

+0

这里是一个不推荐使用的例子:即使'UITableView'具有'assign'给它的委托:'@property(nonatomic,assign)id delegate;' – 2015-03-20 23:59:36