什么是 objc_selector 实现?

Ale*_*nev 6 macos objective-c objective-c-runtime selector ios

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

typedef struct objc_selector *SEL;
Run Code Online (Sandbox Code Playgroud)

但我找不到如何objc_selector实施。

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

#import <Foundation/Foundation.h>

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

, thenmySelector只是一个指针。在它包含的地址之后,我们看到了 C 字符串,它可以显示为:

const char* mySelector = "mySelector";
Run Code Online (Sandbox Code Playgroud)

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

deh*_*len 4

这可能对您有帮助:

现在这个很有趣。SEL 是“选择器”的类型,它标识方法的名称(而不是实现)。因此,例如,方法-[Foo count]-[Bar count]都共享一个选择器,即选择器"count"。SEL 是一个指向 struct 的指针objc_selector,但是 struct 到底是什么objc_selector?好吧,它的定义有所不同,具体取决于您使用的是 GNU Objective-C 运行时还是 NeXT Objective-C 运行时(如 Mac OS X)。好吧,最终 Mac OS X 将 SEL 映射到简单的C strings. 例如,如果我们用 a 定义一个 Foo 类- (int)blah method,代码NSLog(@"SEL = %s", @selector(blah));将输出SEL = blah.

摘自:这里