いい加減、delegateばっかだと、あっちこっち読むのが大変なので書いてみた
まず、呼び出される側から。
BlockSample.h
#import <Foundation/Foundation.h>
typedef void (^BlockSampleCallBack)(NSArray *foo);
@interface BlockSample : NSObject
- (void)hoge:(NSString *)fuga callback:(BlockSampleCallBack)callback;
@end
typedefで定義してするほうが可読にいいよねってことらしい。
BlockSample.m
#import "BlockSample.h"
@implementation BlockSample
- (void)hoge:(NSString *)fuga callback:(BlockSampleCallBack)callback
{
NSArray *array = @[@"りんご", @"ごりら", @"らぶらぶ"];
if (callback) {
callback(array);
}
}
@end
このhogeメソッドの呼び出し側で、callbackにnilを入れる事もあると思うので、
落ちないように対策はしておこう。
下記に詳しく書いてあるよ
cf.Block引数の安全な呼び出し方(tomohisaota)
次に呼び出し側を書く。
CalledBlockSample.m
// いろいろと割愛
- (void)moDMP
{
// BlockSampleがシングルトンだったとして...
[[BlockSample] sharedManager] hoge:@"これはテストだ" callback:^(NSArray *foo) {
NSLog(@"アホな配列がやってくるお %@", foo);
}];
// って書く人もいるけど
[[BlockSample] sharedManager] hoge:@"これはテストだ" callback:^(NSArray *foo) {}];
// 僕はnilを入れるので、BlockSample.m内でcallbackを使う際にnil対策したった
[[BlockSample] sharedManager] hoge:@"これはテストだ" callback:nil];
}
// いろいろと割愛
これで忘れないかな。