デリゲートプロパティ宣言の「弱い」と「割り当て」の違いは何ですか


87

これの違いは何ですか?

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

この:

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

デリゲートのプロパティを使用したいと思います。

回答:


153

唯一の違いweakとは、assignオブジェクトならばということであるweakプロパティポイントの割り当てが解除されたために、その後の値weakのポインタに設定されnil、あなたがゴミにアクセスする危険を冒すことはないように、。を使用した場合assign、それは起こりません。そのため、オブジェクトがあなたの下から割り当て解除されてアクセスしようとすると、ガベージにアクセスします。

Objective-Cオブジェクトの場合、を使用できる環境にいる場合はweak、それを使用する必要があります。


16
Cocoaタッチフレームワーククラスの一部がデリゲートの割り当てをまだ使用している理由を知っていますか?たとえば、UISearchDisplayControllerのデリゲートはまだ割り当てられています。なぜ更新されなかったのですか?
Pwner

@PwnerはiOS 8.0で非推奨になっているようです
Stavash

以下は非推奨ではない例です:デリゲートもUITableView持っassignています:@property (nonatomic, assign) id <UITableViewDelegate> delegate;
Chris Nolet

3
@ChrisNoletおそらく彼らはまだ内部でMRC(手動参照カウント)を使用しているためです。
Marco Sero、2015

2
今日の時点で、UITableViewのデリゲートの例は次のとおりです。したがって、それはもはや有効な例ではありません。
sdoowhsoj
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.