什么是objc_selector实现?

时间:2015-02-18 10:37:53

标签: ios objective-c macos selector objective-c-runtime

我发现SEL类型具有下一个定义:

typedef struct objc_selector *SEL;

但我无法找到objc_selector的实施方式。

好的,如果我们有下一个代码

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
  SEL mySelector = NSSelectorFromString(@"mySelector");
  return 0;
}

,然后mySelector只是一个指针。在它包含的地址之后,我们看到了C字符串,其中可以呈现如下:

const char* mySelector = "mySelector";

但是objc_selector不是C字符串,它是结构,它可以包含其他内容。所以我想知道如何实现objc_selector结构。

1 个答案:

答案 0 :(得分:4)

这可能会对您有所帮助:

  

现在这个很有趣也很有趣。 SEL是&#34;选择器&#34; 的类型,它标识方法的名称(不是实现)。因此,例如,方法-[Foo count]-[Bar count]都共享一个选择器,即选择器"count"。 SEL是指向结构objc_selector的指针,但是objc_selector是什么?嗯,根据您是否使用GNU Objective-C运行时或NeXT Objective-C运行时(如Mac OS X),它的定义不同。好吧,最终Mac OS X将SEL映射到简单的C strings。例如,如果我们使用- (int)blah method定义Foo类,则代码NSLog(@"SEL = %s", @selector(blah));将输出SEL = blah.

取自:here