我发现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
结构。
答案 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