Jac*_*nkr 28 iphone xcode objective-c selector ios
如何将一个方法作为参数传递给另一个方法?我在课堂上这样做.
A类:
+ (void)theBigFunction:(?)func{
// run the func here
}
Run Code Online (Sandbox Code Playgroud)
B级:
- (void)littleBFunction {
NSLog(@"classB little function");
}
// somewhere else in the class
[ClassA theBigFunction:littleBFunction]
Run Code Online (Sandbox Code Playgroud)
C级:
- (void)littleCFunction {
NSLog(@"classC little function");
}
// somewhere else in the class
[ClassA theBigFunction:littleCFunction]
Run Code Online (Sandbox Code Playgroud)
Fil*_*lic 45
你正在寻找的类型是selector(SEL
),你得到一个方法的选择器,如下所示:
SEL littleSelector = @selector(littleMethod);
Run Code Online (Sandbox Code Playgroud)
如果该方法采用参数,您只需将:
它们放在何处,如下所示:
SEL littleSelector = @selector(littleMethodWithSomething:andSomethingElse:);
Run Code Online (Sandbox Code Playgroud)
此外,方法实际上不是函数,它们用于向特定类(以+开头)或特定实例(以 - 开头)发送消息.函数是C类型,并不像方法那样真正具有"目标".
一旦你得到一个选择器,你就可以在你的目标(无论是类还是实例)上调用该方法,如下所示:
[target performSelector:someSelector];
Run Code Online (Sandbox Code Playgroud)
这方面的一个很好的例子是UIControl
的addTarget:动作:forControlEvents:方法,你通常在创建时使用UIButton
或一些其他的控制对象编程.
另一种选择是看块.它允许您传递一个代码块(一个闭包).
这是一个很好的块写:
http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1
这是苹果文档:
Objective C使这个操作相对容易.Apple提供此文档.
要直接解决您的问题,您不是在调用函数,而是调用选择器.以下是一些示例代码:
大功能:
+ (void)theBigFunction:(SEL)func fromObject:(id) object{
[object preformSelector:func]
}
Run Code Online (Sandbox Code Playgroud)
然后是B班:
- (void)littleBFunction {
NSLog(@"classB little function");
}
// somewhere else in the class
[ClassA theBigFunction:@selector(littleBFunction) fromObject:self]
Run Code Online (Sandbox Code Playgroud)
那么对于C类:
- (void)littleCFunction {
NSLog(@"classC little function");
}
// somewhere else in the class
[ClassA theBigFunction:@selector(littleCFunction) fromObject:self]
Run Code Online (Sandbox Code Playgroud)
编辑:修复选择器发送(删除分号)
归档时间: |
|
查看次数: |
32366 次 |
最近记录: |