web-dev-qa-db-ja.com

自動参照カウントでデリゲートを使用する方法

ARCのワゴンに飛び乗った。以前は、デリゲートプロパティを次のように宣言していました。

@property(assign) id<MyProtocol> delegate;

だから私はARCの下でこれを行うと思いました:

@property(weak) id<MyProtocol> delegate;

そうではありません。 .mの@synthesizeステートメントに、コンパイルerrorがあります。

*意味上の問題:__weakプロパティ 'delegate'の既存のivar 'delegate'は__weak *である必要があります*

私はそれを弱いと宣言しました!また、プロトコルを実装するクラスを弱参照プロパティに渡す方法も教えてください。それらを奇妙なobj_unretained呼び出しの1つでラップする必要がありますか?

これに関するどんな助けでも非常にありがたいです。

45
Mike S

「ivar」は、表示されていない「インスタンス変数」を意味します。私はそれが次のようなものであることを賭けています:

@interface Foo : NSObject {
    id delegate;
}

@property (weak) id delegate;

エラーが言っているのは、次のように見える必要があるということです。

@interface Foo : NSObject {
    __weak id delegate;
}

@property (weak) id delegate;

プロパティが弱いと主張する場合、値が最終的に格納されるivarも弱い必要があります。

65
tc.