2012-03-23 9 views
2

私はARCを初めて使いました。完全なブロックでメソッドを呼びたいと思いますが、警告が表示されます。このブロックで「自己」を強くキャプチャすると、保持サイクルにつながる可能性があります。。コード:ブロック内のメソッドを呼び出しますか?

- (void) handlerComplete 
{ 
    //... 
} 

- (void) loadData 
{ 
    ... 
    operation.completeBlock = ^(NSInteger index) { 
     [self handlerComplete]; 
    }; 
} 

アドバイスはありますか?ありがとう。

operation.completeBlock = ^(NSInteger index) { 
    __weak Foo *bar = self; 
    [bar handlerComplete]; 
}; 

を、私はこれが機能すると思います、私はそれを確認していないにもかかわらず:

答えて

2

ではなく、弱参照を作成します

- (void) loadData 
{ 
    __weak MyClassType *myClass = self; 
    operation.completeBlock = ^(NSInteger index) { 
     [myClass handlerComplete]; 
    }; 
} 
0

で試してみてください。

+0

私はそれがうまくいくはずだと信じていますが、__weak(または__unsafe_unretained)変数をブロック外で宣言する必要があるかもしれません。 –

+0

ありがとう、ブロック内に '__weak Foo * bar = self;'を入れても同じ警告が出ます。私はそれをブロックの外に置くと動作します。 – fannheyward

関連する問題