/ / bloque en bloque causa ser retenido, __bloque no funciona - objetivo-c, ios, bloque

bloque en bloque causa auto retención, __bloque no funciona - objetivo-c, ios, bloque

Agregar: el problema ocurre cuando copio el bloque dentro de la función: [copia de bloque]

Ya estoy usando __block para evitar mantenerme. __block typeof (self) bself = self;

Sin embargo, cuando hay otro bloque en este bloque, y se usa bself, el self seguirá reteniéndose.

Como se muestra en el código a continuación, la primera persona no se retendrá como se esperaba. Sin embargo, el segundo bself se mantendrá a sí mismo.

            __block typeof(self) bself = self;

[layer start:param1
completeHanlder:^{
bself.xx = localxx;

dispatch_async(dispatch_get_main_queue(), ^(void) {
... ...
[bself something];
});
}
];

Alguien sabe razonar detrás

Respuestas

-1 para la respuesta № 1

Estás haciendo mal, pero concepto es correcto, aquí está el error:

__bloquear

Esto se usa para dejar una referencia fuerte dentro de tu bloque. Por ejemplo, podría cambiar el valor fuera de su bloque.

La forma correcta es hacerlo con __weak que recibirá una referencia débil de su instancia y evitará una referencia de bucle fuerte como esta:

 __weak typeof(self) bself = self;

Y porque __block que creaste retiene y fuerte referencia :)