dispatch_block_t
dispatch/object.h に以下のような定義がある。
typedef void (^dispatch_block_t)(void);
自前の実装の中で
- (void)test { void (^blockName)(void) = ^{ }; }
@interface MyObject : NSObject @property (nonatomic, copy) void (^blockName)(void); @end
このように引数無し返り値無しのブロックの定義を行う際に、代わりに dispatch_block_t 型を使用する事ができる。
- (void)test { dispatch_block_t blockName = ^{ }; }
@interface MyObject : NSObject @property (nonatomic, copy) dispatch_block_t blockName; @end
このような使われ方はiOSの標準フレームワークではほとんどされていないが、iOS 8で登場した Photos.framework の PHPhotoLibrary
の
- (void)performChanges:(dispatch_block_t)changeBlock completionHandler:(void(^)(BOOL success, NSError *error))completionHandler; - (BOOL)performChangesAndWait:(dispatch_block_t)changeBlock error:(NSError *__autoreleasing *)error;
これらのメソッドでは dispatch_block_t でのブロックが使用されている。
また Apple のサンプルコードでもたまにこの型の使用を見かける事ができる。