到目前为止,我已经学会了在Obj-C中创建对象的这些方法:
[[FooClass alloc] init]
[FooClass new]
[NSNumber numberWithInt:1]
现在我遇到了:
SEL aSelector = NSSelectorFromString(@"methodName");
那句法让我感到困惑 aSelector 是SEL类的一个实例,使 NSSelectorFromString 是一个不遵循Obj-C语法的工厂方法吗?
注意:根据Apple文档:
“编译的选择器是类型 SEL。”
“当您希望代码发送一个在运行时可能无法知道其名称的消息时,可以使用字符串中的选择器创建。”
答案 0 :(得分:1)
SEL
不是Objective-C类。它是私人struct
的typedef名称:
/// An opaque type that represents a method selector.
typedef struct objc_selector *SEL;
选择器由运行时库本身创建和拥有; NSSelectorFromString()
可能会导致创建选择器,但更有可能是从现有列表中检索。
答案 1 :(得分:1)
NSSelectorFromString()
是一个函数,而前三个例子是方法。这只是函数的语法。它是单独调用的,而不是任何特定的对象。
就选择者而言:
根据文件:
SEL
定义表示方法选择器的opaque类型。
typedef struct objc_selector * SEL;
讨论方法选择器用于表示方法的名称 在运行时。方法选择器是已注册的C字符串 (或“映射”)与Objective-C运行时。由...生成的选择器 当类是时,运行时会自动映射编译器 加载。
这是一个结构,而不是一个类。
答案 2 :(得分:0)
查看SEL结构
typedef struct objc_selector * SEL;
用于表示方法的名称。 objective-c中的SEL
类型是指向struct objc_selector
NSSelectorFromString,
它从字符串返回SEL。