2012-02-24 7 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フレームワーククラスのいくつかが代理人のために代入を使用しているのを知っていますか?たとえば、[UISearchDisplayController](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchDisplayController_Class/Reference/Reference.html#//apple_ref/occ/instp/UISearchDisplayController/delegate)の代理人は、依然として割り当てられます。なぜ更新されなかったのですか? – Pwner

+0

@PwnerはiOS 8.0で廃止されているようです。 – Stavash

+0

非推奨の例があります: 'UITableView'でもデリゲートに' assign'があります: '@property(nonatomic、assign)id delegate;' –