Entiendo que debe copiar bloques para que se queden después de que sale un marco de pila. Pero, ¿cómo se aplica para apilar-asignados bloques utilizados dentro de un bloque anidado como en el siguiente ejemplo de código:¿Debo copiar un bloque aquí?
- doSomethingFunkyThenCall:(void(^)(int someValue))callback
{
[[NSOperationQueue currentQueue] addOperationWithBlock:^{
// ... do some work here, potentially nesting into further blocks ...
callback(result);
}];
}
Obviamente, el marco doSomethingFunkyThenCall:
pila terminará antes de la devolución de llamada se ejecuta, por lo que tendrá que ser copiado Pero, ¿esto sucederá automáticamente en la llamada al addOperationWithBlock:
o tengo que hacerlo manualmente?
No; no es necesario copiar el bloque en este caso. Cuando el bloque en cola con 'addOperationWithBlock:' se copia (lo que 'NSOperationQueue' hará), copiará el bloque encapsulado. – bbum
Gracias. Tienes razón. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW1 – joerick
Gracias bbum y joerick! No había visto antes este párrafo de ese enlace: "Cuando copias un bloque, cualquier referencia a otros bloques desde ese bloque se copia si es necesario; se puede copiar un árbol completo (desde la parte superior). Si tienes variables de bloque y usted hace referencia a un bloque desde dentro del bloque, ese bloque se copiará ". –