typedefで定義
1 2 3 4 5 6 |
typedef ReturnType (^Name)(Parameters); 例) typedef void (^SomeHandler)(NSError *error); - (void)someWorkWithCompletion:(SomeHandler)handler { ... } |
ブロック名が真ん中にあるのが紛らわしい。
直接パラメータで定義
1 2 3 4 5 6 |
someMethodWithCompletion:(ReturnType (^)(Parameters))parameterName 例) - (void)someMethodWithCompletion:(void (^)(NSData *data))completionHandler; [someClass someMethodwithCompletion:^(NSData *data) { ... }]; |
プロパティで定義
1 2 3 4 5 6 7 |
ReturnType (^)(Parameters) 例) @property (nonatomic, copy) void (^completionHandler)(BOOL success); 구현 예제(Implementation Example): someClass.completionHandler = ^(BOOL success) { ... }; |
ブロック名が真ん中にあるので注意
ブロックの中に外部変数を書き込みする場合
1 2 3 4 5 |
__block int result = 0; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ .... result = [some workAndResult]; }); |
この投稿へのコメント