Objective-C传递方法作为参数

你如何将一个方法作为parameter passing给另一个方法? 我正在跨class级做这个。

A类:

+ (void)theBigFunction:(?)func{ // run the func here } 

B类:

 - (void)littleBFunction { NSLog(@"classB little function"); } // somewhere else in the class [ClassA theBigFunction:littleBFunction] 

C类:

 - (void)littleCFunction { NSLog(@"classC little function"); } // somewhere else in the class [ClassA theBigFunction:littleCFunction] 

你正在寻找的types是select器( SEL ),你得到一个方法的select器是这样的:

 SEL littleSelector = @selector(littleMethod); 

如果该方法带有参数,那么你只要把它们放在哪里,就像这样:

 SEL littleSelector = @selector(littleMethodWithSomething:andSomethingElse:); 

而且,方法并不是真正的函数,它们被用来发送消息到特定的类(当用+开始的时候)或者它的特定的实例(当以 – 开头的时候)。 函数是Ctypes的,并不像方法那样有一个“目标”。

一旦你得到一个select器,你可以在你的目标(不pipe是类还是实例)上调用这个方法:

 [target performSelector:someSelector]; 

一个很好的例子就是UIControl的addTarget:action:forControlEvents:在编程创buildUIButton或其他控制对象时通常使用的方法。

另一个select是看块。 它允许你传递一段代码(一个闭包)。

这是一个很好的写在块:

http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1

这里是苹果文档:

http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html

Objective C使这个操作相对容易。 苹果提供了这个文档 。

要直接解决你的问题,你不是调用一个函数,而是一个select器。 这是一些示例代码:

大function:

 + (void)theBigFunction:(SEL)func fromObject:(id) object{ [object preformSelector:func] } 

那么对于B类:

 - (void)littleBFunction { NSLog(@"classB little function"); } // somewhere else in the class [ClassA theBigFunction:@selector(littleBFunction) fromObject:self] 

那么对于C类:

 - (void)littleCFunction { NSLog(@"classC little function"); } // somewhere else in the class [ClassA theBigFunction:@selector(littleCFunction) fromObject:self] 

编辑:修复select器发送(删除分号)