後で使用するために、objective-cブロックをプロパティに保存します。どうすればいいかわからなかったので、少しグーグルで検索しましたが、この件に関する情報はほとんどありません。しかし、私は最終的に解決策を見つけることに成功し、私のような他の初心者のために共有する価値があるかもしれないと考えました。
最初は、Block_copyとBlock_releaseを使用するには、手動でプロパティを記述する必要があると考えていました。
幸いなことに、 ブロックはNSObjects であり、_- copy
_/_- release
_は_Block_copy
_/_Block_release
_と同等であることがわかりました。したがって、@property (copy)
を使用して、セッターとゲッターを自動生成できます。
編集: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();
あるいは、typedefなし
@property (copy, nonatomic) void (^selectionHandler) (NSDictionary*) ;
これに関する非常に良い説明は、83ページから始まるWWDC 2012セッション712にあります。ARCでブロックを保存する正しい方法は次のとおりです。
@property(strong) my_block_type work;
保持サイクルに注意してください。解決する良い方法は、不要になったらブロックをnilに設定することです。
self.work = nil;