ARC, Bloques y ciclos de retención

Trabajando en un proyecto iOS que apunta a 4.0 y 5.0, usando ARC.

Entrar en un problema relacionado con bloques, ARC y hacer referencia a un objeto desde fuera del bloque. Aquí hay un código:

 __block AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
   [operation setCompletionBlock:^ {
       if ([operation isCancelled]) {
           return;
       }

... do stuff ...

operation = nil;
}];

En este caso, el compilador advierte que usar 'operación' en el bloque conducirá a un ciclo de retención. Bajo ARC, __block ahora retiene la variable.

Si agrego __unsafe_unretained, el compilador libera el objeto inmediatamente, por lo que obviamente eso no funcionará.

Estoy apuntando a 4.0, así que no puedo usar __weak.

Intenté hacer algo como esto:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
__block __unsafe_unretained AFHTTPRequestOperation *weakOperation = operation;

pero mientras débil La operación no es nula, ninguna de sus propiedades se completa cuando está dentro del bloque.

¿Cuál es la mejor manera de manejar esta situación dadas las restricciones del proyecto mencionadas anteriormente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta