翻译自这里
selector
是一个对象(object)选择执行某个方法的名称,或者是代码编译后用来唯一标识一个方法。selector
自己不能做任何事,它只是定义了一个方法。selector
与普通字符串的区别就是编译器确保它是唯一的。它只有在运行时扮演类似动态方法指针的角色,也就是正确指向一个类的实现文件中的方法。
例如,你创建了 run
方法,和 Dog, Athlete, ComputerSimulation
这些类,并且这些类都实现了 run
方法。对象可以通过 selector
调用各自的 run
方法。
获取 selector
SEL
是selector
编译后的类型,通常有两种方式获取 selector
:
- 在编译时期,用
@selector
SEL aSelector = @selector(methodName);
- 在运行时期,用
NSSelectorFromString
这个方法
SEL aSelector = NSSelectorFromString(@"methodName");
You use a selector created from a string when you want your code to send a message whose name you may not know until runtime.
使用 selector
你可以通过 performSelector:
或其它类似的方法来调用一个方法
SEL aSelector = @selector(run);
[aDog performSelector:aSelector];
[anAthlete performSelector:aSelector];
[aComputerSimulation performSelector:aSelector];
(You use this technique in special situations, such as when you implement an object that uses the target-action design pattern. Normally, you simply invoke the method directly.)