在这里使用selector的目的是什么?
CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(render:)];
Source: 来自初学者OpenGL es 2.0网站的代码
我读了定义
@selector()指令允许您引用已编译的选择器, 而不是完整的方法名称。
不幸的是,这并不适合我。我的专长是C#。如果您能将答案与C#中可以实现类似解决方案的方式联系起来,我将不胜感激。
答案 0 :(得分:6)
选择器声明函数的名称。而已。它与Reflection类MethodInfo
非常相似,但它使用起来要简单得多。
C#和Objective-C的比较: 请注意,C#代码可能有点偏,因为我很久没有使用它了
// C#
using namespace system.reflection;
class someClass {
void someMethod(object input) {
string methodName = "doSomething";
input.getType().getMethod(methodName).invoke(input, new Object[] { });
}
}
// OBJC
@implementation someClass
-(void) someMethod:(id) input
{
SEL methodName = @selector(doSomething);
[input performSelector:methodName];
}
@end
就SEL
的内部而言,它是一个C-string
,它被放入一个私有地图中,以便在运行时查找速度。
答案 1 :(得分:0)
以下两个链接可以很好地解释它们。第一个是关于选择器的Apple文档,第二个是选择器,代理和块之间的区别(相对较新)。
http://bradcupit.tumblr.com/post/3431169229/ios-blocks-vs-selectors-and-delegates
编辑:
哦,而不是C#,但如果你熟悉javaScript等,那么选择器类似于回调。同样,第二篇文章有助于解释用途/相似之处/差异。