45

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

@property(assign) id<MyProtocol> delegate;

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

@property(weak) id<MyProtocol> delegate;

そうではありません。.m の @synthesize ステートメントで、コンパイルエラーが発生しました。

*セマンティックな問題: __weak プロパティ 'delegate' の既存の ivar 'delegate' は __weak でなければなりません*

私はそれを弱いと宣言しました!また、プロトコルを実装するクラスを弱参照プロパティに渡すにはどうすればよいですか。それらの奇妙な obj_unretained 呼び出しのいずれかでラップする必要がありますか?

これに関するヘルプは非常に高く評価されます。

4

1 に答える 1

65

「ivar」は「インスタンス変数」を意味しますが、表示されていません。私はそれが次のように見えるに違いない:

@interface Foo : NSObject {
    id delegate;
}

@property (weak) id delegate;

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

@interface Foo : NSObject {
    __weak id delegate;
}

@property (weak) id delegate;

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

于 2011-06-30T02:01:05.760 に答える