実装でメソッド引数に __weak 参照を使用するプロトコルがあります。プロトコルを次のように定義します。
@protocol TestProtocol
-(void) op:(__weak NSObject*)x;
@end
次に、実装を作成します。
-(void) op:(NSObject*)x
{
}
そして x は強い参照になります。__weak 宣言をプロトコル実装に移動すると、「x」は弱参照になります。
プロトコルの呼び出し元は既に強い参照を保持しているため、実装が別の強い参照を作成しないようにしたいと考えています。