• Al igual que todas las variables locales, existe un bloque no estático en la pila y se le apareció desde la pila, como cualquier otra variable local que no ha sido declarada estática.
• Block_copy() copia el bloque de la pila en el montón, donde existen todas las instancias de malloc. Y como todos los métodos nuevos/de copia, Block_copy() devuelve un objeto alojado de montón con un conteo de retención de 1. Un bloque es un objeto objetivoC pero no se conforma como un objeto normal. Por lo tanto, no debería haber diferencia entre Block_Release() y el método de lanzamiento objetivo.
• Este ejemplo utiliza el método de copia de una instancia de bloque. Debido a que asignar el resultado de un Block_copy() a un id requiere un tipo de conversión que no quiero equivocarme. El método de copia permite que la variable de bloque se asigne directamente a una identificación.
- (void) setupStoredBlock
{
int zStackLocalVariable = 42;
iHeapAllocatedVariable = [^int(int aMore){ return zStackLocalVariable + aMore; } copy];
}
• Declarar un objeto estático es requerir que se asigne físicamente con el código mismo. Un bloque que se declara estático no permite al compilador acceder a variables fuera de su propio ámbito. Debido a los requisitos de una declaración de bloque estático, supongo que el bloque en la pila es de alguna manera diferente del bloque que está en el montón.
• Un bloque es un objeto objetivo cuya clase cuyo nombre de clase y otra información asociada aún no he intentado recuperar, pero, como Protocolo, Objeto y otras clases ocultas de objetivoC, no se ajusta a NSObject. Sin embargo, al igual que todos los objetos de ObjectC, debe cumplir con retener/liberar. ARC amplía las equivalencias de retención/liberación en los objetos de Core Foundation también, y probablemente, si no ahora, luego eventualmente, en asignaciones malloc/free.
• Espero la verdadera motivación para una exploración exhaustiva de mikeash.com, ya que a Apple le gusta mantenernos a todos en un plano hiper-teórico de poca importancia física, aunque todo lo que es significativo es físico.
ARC and blocks also discussed here
pude reproducir esto en una aplicación de prueba: https://bitbucket.org/boredzo/block-retention-test/ –