Objective c 用C#开发人员可以理解的术语来说,@selector指令是什么?

Objective c 用C#开发人员可以理解的术语来说,@selector指令是什么?,objective-c,ios,Objective C,Ios,在这里使用a的目的是什么 CADisplayLink*displayLink=[CADisplayLink displayLinkWithTarget:self-selector:@selector(呈现:)] 来自初学者OpenGL es 2.0站点的代码 我读了定义 @selector()指令允许您引用已编译的选择器, 而不是完整的方法名 不幸的是,这并没有为我澄清。我的专长是C。因此,如果您能将答案与如何在C#中实现类似的解决方案联系起来,我将不胜感激。这里有两个链接,它们一起很好地解释了

在这里使用a的目的是什么

CADisplayLink*displayLink=[CADisplayLink displayLinkWithTarget:self-selector:@selector(呈现:)]

来自初学者OpenGL es 2.0站点的代码

我读了定义

@selector()指令允许您引用已编译的选择器, 而不是完整的方法名


不幸的是,这并没有为我澄清。我的专长是C。因此,如果您能将答案与如何在C#中实现类似的解决方案联系起来,我将不胜感激。

这里有两个链接,它们一起很好地解释了这些问题。第一个是苹果关于选择器的文档,第二个是关于选择器、委托和块(它们相对较新)之间的区别

编辑:


哦,不是C#,但是如果您熟悉javaScript或类似的东西,选择器类似于回调。同样,第二篇文章有助于解释它们的用法/相似之处/不同之处。

这里有两个链接可以很好地解释它们。第一个是苹果关于选择器的文档,第二个是关于选择器、委托和块(它们相对较新)之间的区别

编辑:


哦,不是C#,但是如果您熟悉javaScript或类似的东西,选择器类似于回调。同样,第二篇文章有助于解释函数的用法/相似性/差异。

选择器声明函数的名称。就这样。它与反射类非常相似,但使用起来更简单

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字符串
,为了在运行时加快查找速度,它被放在私有映射中。

选择器声明函数的名称。就这样。它与反射类非常相似,但使用起来更简单

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
,为了在运行时加快查找速度,它被放入了私有映射中。

您需要阅读Objective-C语言的文档。这是一个初学者问题。很好,你找到了文档。再次阅读您链接的页面的第一句话:“在Objective-C中,选择器有两种含义。当在对象的源代码消息中使用它时,它可以用来简单地指代方法的名称。不过,它也指代在编译源代码时替换名称的唯一标识符。”什么“类似的解决方案”你是在说,或者更确切地说,你想解决的问题是什么?选择器和消息传递——与其他OOP语言的方法调用不同——是ObjC运行时的核心功能,在C#中可能没有对应的功能(注意,我对C#一无所知)..@Richard:OP提供了到问题主体中完全相同的章节的链接。您需要阅读Objective-C语言的文档。这是一个初学者问题。很好,你找到了文档。再次阅读您链接的页面的第一句话:“在Objective-C中,选择器有两种含义。当在对象的源代码消息中使用它时,它可以用来简单地指代方法的名称。不过,它也指代在编译源代码时替换名称的唯一标识符。”什么“类似的解决方案”你是在说,或者更确切地说,你想解决的问题是什么?选择器和消息传递——与其他OOP语言的方法调用不同——是ObjC运行时的核心功能,在C#中可能没有对应的功能(注意,我对C#一无所知)..@Richard:OP在问题正文中提供了一个指向同一章节的链接。OP在问题正文中已经提供了指向文档的链接。此外,请您在回答中包含链接文章的基本部分,并提供链接以供参考。第二个链接就是我正在寻找的信息。是的,我知道JavaScript。这也有帮助。感谢您花时间阅读并理解此问题!OP在问题正文中已经提供了指向文档的链接。此外,请您在回答中包含链接文章的基本部分,并提供链接以供参考。第二个链接就是我正在寻找的信息。是的,我知道JavaScript。这也有帮助。感谢您花时间阅读并理解此问题!实际上,
MethodInfo
类似于
Method
,一种低级的Objective-C运行时类型
SEL
没有直接的等价物。@JonathanGrynspan你在跟踪我吗?是的,但是为了解释
SEL
s,我认为比较很好。不,我认为我们只是有一些相同的标记标记为收藏夹。实际上,
MethodInfo
类似于
Method
,一种低级的Objective-C运行时类型
SEL
没有直接的等价物。@JonathanGrynspan你在跟踪我吗?是的,但是为了解释SEL,我认为比较很好。不,我认为我们只是有一些相同的标记标记为收藏夹。