很多方法。
一:好的。使用块(闭包,lambda演算,不管你怎么称呼它):
typedef void (^MyCallback)();
- (void)callTheCallback:(MyCallback)blockToInvoke
{
blockToInvoke();
}
MyCallback cb = ^{
NSLog(@"I was called! :D");
};
[self callTheCallback:cb];
二:坏。获取指向方法函数本身的指针并调用它。(警告:如果你使用这种方法,我会起诉你。)
- (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)];
三:丑。使用委托:
- (void)delegateMethodOfSomeObject:(SomeObject *)obj
{
NSLog(@"I was called! :D");
}
SomeObject *obj = [[SomeObject alloc] init];
obj.delegate = self;
[obj makeThisObjectSomehowCallItsDelegateThatIsCurrentlySelf];