web-dev-qa-db-ja.com

ARCでデリゲートプロパティを宣言する推奨方法

すべてのデリゲートプロパティを次のように宣言していた

@property (assign) id<FooDelegate> delegate;

すべての割り当てプロパティは弱いポインターになるはずだという印象を受けましたが、これは正しいですか?私が次のように宣言しようとすると:

@property (weak) id<FooDelegate> delegate;

@synthesizeを試行中にエラーが発生します(自動生成された弱いプロパティはサポートされていません)。

この場合のベストプラクティスは何ですか?

31
cfischer

使用する __unsafe_unretained代わりにiOS 4および5をターゲットとするARCプロジェクトの場合はweakです。唯一の違いは、割り当て解除時にweakはポインターを無効にすることで、iOS 5でのみサポートされます。

他の質問に対する回答は なぜObjective-Cのデリゲートは通常、保持ではなくプロパティの割り当てが与えられるのですか? です。

22
Jano

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ビデオでも言及されています。

23
djromero