Aclaración sobre references débiles y ciclos de retención.

Tengo el siguiente código:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest: request]; operation.completionBlock = ^{ if([operation hasAcceptableStatusCode]){ } }; 

A ARC no parece gustarle [operation hasAcceptableStatusCode], y recibo la siguiente advertencia: "Captura 'operación' fuertemente en este bloque es probable que conduzca a un ciclo de retención".

No tengo mucha experiencia con references, ¿alguna idea cuál es el path a seguir?

Gracias,
Shai

Los bloques capturan (retienen) los objects que hace reference desde el exterior de ellos.

la operación retendrá completionBlock que mantendrá la operación, de ahí el ciclo de retención.

Lo mejor que puedes hacer es crear una reference débil al object y pasar eso en su lugar

 AFHTTPRequestOperation * __weak theOperation = operation operation.completionBlock = ^{ if (theOperation) { return; } }; 

Las references débiles son seguras en time de ejecución, por lo que si la operación se ha desasignado, simplemente enviará un post a cero.