すべてのデリゲートプロパティを次のように宣言していた
@property (assign) id<FooDelegate> delegate;
すべての割り当てプロパティは弱いポインターになるはずだという印象を受けましたが、これは正しいですか?私が次のように宣言しようとすると:
@property (weak) id<FooDelegate> delegate;
@synthesizeを試行中にエラーが発生します(自動生成された弱いプロパティはサポートされていません)。
この場合のベストプラクティスは何ですか?
使用する __unsafe_unretained
代わりにiOS 4および5をターゲットとするARCプロジェクトの場合はweak
です。唯一の違いは、割り当て解除時にweak
はポインターを無効にすることで、iOS 5でのみサポートされます。
他の質問に対する回答は なぜObjective-Cのデリゲートは通常、保持ではなくプロパティの割り当てが与えられるのですか? です。
Xcode 4 Refactor> Convert to Objective-C ARC変換:
@interface XYZ : NSObject
{
id delegate;
}
@property (assign) id delegate;
...
@synthesize delegate;
に:
@interface XYZ : NSObject
{
id __unsafe_unretained delegate;
}
@property (unsafe_unretained) id delegate;
...
@synthesize delegate;
私が正しく覚えていれば、ARCに関するWWDC 2011ビデオでも言及されています。