2012-02-24 78 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