tutorial programación objective mundo lenguaje hola compilador caracteristicas objective-c objective-c-blocks nscoding

objective-c - programación - objective c vs swift



¿Codificando un bloque de Objective-c? (1)

¿Es posible codificar un bloque Objective-C con un NSKeyedArchiver ?

No creo que un objeto Block sea NSCoding NSCoding, por lo tanto, [coder encodeObject:block forKey:@"block"] no funciona?

¿Algunas ideas?


No, no es posible por una variedad de razones. Los datos contenidos en un bloque no se representan de manera similar a, por ejemplo, las variables de instancia. No hay inventario de estado y, por lo tanto, no hay manera de enumerar el estado para propósitos de archivo.

En su lugar, le sugiero que cree una clase simple para almacenar sus datos, cuyas instancias llevan el estado utilizado por los bloques durante el procesamiento y que se pueden archivar fácilmente.

Podrías encontrar la respuesta a esta pregunta interesante . Es relacionado.

Para expandir, digamos que tenías una clase como:

@interface MyData:NSObject { ... ivars representing work to be done in block } - (void) doYourMagicMan; @end

Entonces podrías:

MyData *myWorkUnit = [MyData new]; ... set up myWorkUnit here ... [something doSomethingWithBlockCallback: ^{ [myWorkUnit doYourMagicMan]; }]; [myWorkUnit release]; // the block will retain it (callback *must* Block_copy() the block)

Desde allí, puede implementar el archivado en MyData, guardarlo, etc. La clave es tratar el Bloque como el activador para realizar el cálculo y encapsular dicho cálculo y el estado necesario del cálculo en la instancia de la clase MyData.