Я работаю над этим кодом, который выполняет некоторую длительную асинхронную операцию в сети, и когда он заканчивается, он запускает блок завершения, в котором выполняется какой-либо тест, и если переменная получает определенное значение, другая немедленная операция должна начинаться немедленно:
-(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
Как я могу это исправить?
Спасибо
Nicola