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 № 1Está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 :)