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结构是如何实现的。
这可能对您有帮助:
现在这个很有趣。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.
摘自:这里
| 归档时间: |
|
| 查看次数: |
1920 次 |
| 最近记录: |