Estoy leyendo la documentación de Xcode y aquí hay algo que me desconcierta:
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
Lo siguiente se copia de la documentación:
Un bloque forma una fuerte referencia a las variables que captura. Si lo usa
self
dentro de un bloque, el bloque forma una fuerte referencia al bloqueself
, por lo que siself
también tiene una fuerte referencia al bloque (lo que normalmente hace), se obtiene un fuerte ciclo de referencia. Para evitar el ciclo, debe crear una__block
referencia débil (o ) a sí mismo fuera del bloque, como en el ejemplo anterior.
No entiendo qué significa 'un débil (o __block
)'?
Es
__block typeof(self) tmpSelf = self;
y
__weak typeof(self) tmpSelf = self;
exactamente lo mismo aquí?
Encontré otra pieza en el documento:
Nota: En un entorno de recolección de basura, si aplica modificadores
__weak
y__block
a una variable, el bloque no garantizará que se mantenga viva.
Entonces, estoy totalmente desconcertado.