Objective c Cocoa@selector用法说明
我刚接触Cocoa/Cocoa Touch,正在阅读一本开发书籍。我遇到过使用@selector()运算符的情况。我对@selector()操作符应该如何以及何时使用有点茫然。有人能提供一个简短而甜蜜的解释和例子,说明为什么使用它以及它给开发者带来了什么好处吗 顺便说一句,下面是从苹果iPhone开发网站上获取的使用@selector()的示例代码Objective c Cocoa@selector用法说明,objective-c,Objective C,我刚接触Cocoa/Cocoa Touch,正在阅读一本开发书籍。我遇到过使用@selector()运算符的情况。我对@selector()操作符应该如何以及何时使用有点茫然。有人能提供一个简短而甜蜜的解释和例子,说明为什么使用它以及它给开发者带来了什么好处吗 顺便说一句,下面是从苹果iPhone开发网站上获取的使用@selector()的示例代码 选择器操作符提供了一种引用对象提供的方法的方法,有点类似于C中的函数指针。它非常有用,因为它允许您对对象调用方法的过程进行解耦。例如,一段代码可以提
选择器操作符提供了一种引用对象提供的方法的方法,有点类似于C中的函数指针。它非常有用,因为它允许您对对象调用方法的过程进行解耦。例如,一段代码可以提供一个方法,另一段代码可以将该方法应用于给定的一组对象 示例: 测试对象是否实现了某个方法:
[object respondsToSelector:@selector(methodName)]
存储一个方法,以便以后调用对象
SEL method = @selector(methodName);
[object performSelector:method];
在不同的线程上调用方法(对于GUI工作很有用)
每次需要将方法名作为参数传递给另一个方法、函数或变量值时,都会使用
@selector()
。直接传递名称在objective-C中不起作用。一个参考:
除了上面所说的,您还可以将@selector包装在NSInvocation中,以便以后使用。您可以在NSInvocation创建后很长一段时间内将参数设置为NSInvocation,并在需要触发消息时激活它。这给了你很大的力量 为了介绍这个概念,斯科特·史蒂文森(Scott Stevenson)写了一篇很棒的文章,题目是。一个实用的例子是用目标动作识别菜单项的方法 简化示例:
- (BOOL)validateMenuItem:(NSMenuItem *)item {
if ([item action] == @selector(selectFiles:) && otherCondition) {
return YES;
} else {
return NO;
}
}
您可以使用选择器调用对象上的方法,这为Cocoa中目标操作设计模式的实现提供了基础
[myObject performSelector:@selector(runMYmethod:) withObject:parameters];
相当于:
[myObject runMYmethod:parameters];
感谢您的解释-如果您知道对象支持该方法,您能否举例说明为什么要使用它而不是以常规方式调用方法?@lupefiasco:[object performSelectorInBackground:@selector(methodName)]将导致对该方法的异步调用。另一个用例是,如果您将选择器的名称作为字符串,则可以在运行时执行类似于[object performSelector:NSSelectorFromString(某物)…]的操作,该操作可能与
[myObject performSelector:@selector(runMYmethod:) withObject:parameters];
[myObject runMYmethod:parameters];