たくさんの方法。
1つ:良い。ブロックを使用します (クロージャー、ラムダ計算、どのように呼んでも):
typedef void (^MyCallback)();
- (void)callTheCallback:(MyCallback)blockToInvoke
{
blockToInvoke();
}
MyCallback cb = ^{
NSLog(@"I was called! :D");
};
[self callTheCallback:cb];
2:悪い。メソッド関数自体へのポインターを取得し、それを呼び出します。(警告: この方法を使用する場合、私はあなたを訴えます。)
- (void)callTheCallback:(IMP)funcPtrToCall withObject:(id)obj selector:(SEL)sel
{
funcPtrToCall(obj, sel);
}
- (void)someCallbackMethod
{
NSLog(@"I was called! :D");
}
IMP implemt = [[self class] instanceMethodForSelector:@selector(someCallbackMethod)];
[self callTheCallback:implemt withObject:self selector:@selector(someCallbackMethod)];
3:醜い。デリゲートを使用します。
- (void)delegateMethodOfSomeObject:(SomeObject *)obj
{
NSLog(@"I was called! :D");
}
SomeObject *obj = [[SomeObject alloc] init];
obj.delegate = self;
[obj makeThisObjectSomehowCallItsDelegateThatIsCurrentlySelf];