Как хранить блоки в свойствах в Objective-C?
Я хотел бы сохранить блок objective-c в свойстве для последующего использования. Я не был уверен, как это сделать, поэтому я немного погуглил, и есть очень мало информации о предмете. Но в конце концов мне удалось найти решение, и я подумал, что это может быть полезно для других новичков, таких как я.
изначально я думал, что мне нужно будет написать свойства вручную, чтобы использовать Block_copy & Block_release.
к счастью, я узнал, что блоки NSObjects и - copy
/- release
эквивалентно Block_copy
/Block_release
. Так что я могу использовать @property (copy)
для автоматического создания сеттеров и геттеров.
3 ответа:
изменить: обновлено для 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();
вы можете найти очень хорошее объяснение этого в сеансе 712 WWDC 2012, начиная со страницы 83. Правильный способ сохранения блока под дугой заключается в следующем:
@property(strong) my_block_type work;
будьте осторожны с циклами сохранения. Хороший способ решить - установить блок на ноль, когда он вам больше не нужен:
self.work = nil;