objective c - blocks - ¿Cómo almacenar bloques en propiedades en Objective-C?
blocks objective c (3)
Alternativamente, sin el typedef
@property (copy, nonatomic) void (^selectionHandler) (NSDictionary*) ;
Me gustaría almacenar el bloque Object-C en una propiedad para su uso posterior. No estaba seguro de cómo hacerlo, así que busqué en Google un poco y hay muy poca información sobre el tema. Pero al final he logrado encontrar la solución y he pensado que valdría la pena compartirla con otros novatos como yo.
Inicialmente pensé que necesitaría escribir las propiedades a mano para usar Block_copy y Block_release.
Afortunadamente, descubrí que los bloques son NSObjects y - copy
/ - release
es equivalente a Block_copy
/ Block_release
. Entonces puedo usar @property (copy)
para generar automáticamente setters y getters.
Puede encontrar una muy buena explicación de esto en la sesión 712 de WWDC 2012 a partir de la página 83. La forma correcta de guardar un bloque en ARC es la siguiente:
@property(strong) my_block_type work;
Tenga cuidado con los ciclos de retención. Una buena manera de resolver es establecer el bloque en cero cuando ya no lo necesite:
self.work = nil;
Editar: actualizado para ARC
typedef void(^MyCustomBlock)(void);
@interface MyClass : NSObject
@property (nonatomic, copy) MyCustomBlock customBlock;
@end
@implementation MyClass
@end
MyClass * c = [[MyClass alloc] init];
c.customBlock = ^{
NSLog(@"hello.....");
}
c.customBlock();