私はこのコードに取り組んでいます。これはネット上で長い非同期操作を実行し、終了すると完了ブロックをトリガーしてテストを実行し、変数が特定の値を取得した場合、別の長い操作をすぐに開始する必要があります。
-(void) performOperation
{
void(^completionBlock) (id obj, NSError *err, NSURLRequest *request)= ^(id obj,NSError *err, NSURLRequest *request){
int variable=0;
// Do completion operation A
//...
//...
// Do completion operation B
//Get the variable value
if(variable>0){
[self doLengthyAsynchronousOperationWithCompletionBlock: completionBlock];
}
};
//Perform the lenhgty operation with the above completionBlock
[self doLengthyAsynchronousOperationWithCompletionBlock: completionBlock];
}
-(void) doLengthyAsynchronousOperationWithCompletionBlock: completionBlock
{
//Do some lengthy asynchronous stuff
}
このコードを使用すると、コンパイラから次の警告が表示されます。
WARNING: Block pointer variable 'completionBlock' is uninitialized when caputerd by the block
私が変更され:
void(^completionBlock) (id obj, NSError *err, NSURLRequest *request)= ^(id obj,NSError *err, NSURLRequest *request)
の:
__block void(^completionBlock) (id obj, NSError *err, NSURLRequest *request)= ^(id obj,NSError *err, NSURLRequest *request)
しかし、私はこの他の警告を受け取ります:
WARNING 2: Capturing 'completionBlock' strongly in this block is likely to lead to a retain cycle
どうすればこれを修正できますか?
ありがとう
ニコラ