标签:
A selector is the name used to select a method to execute for an object, or the unique identifier that replaces the name when the source code is compiled. A selector by itself doesn’t do anything. It simply identifies a method. The only thing that makes the selector method name different from a plain string is that the compiler makes sure that selectors are unique. What makes a selector useful is that (in conjunction with the runtime) it acts like a dynamic function pointer that, for a given name, automatically points to the implementation of a method appropriate for whichever class it’s used with. Suppose you had a selector for the method run
, and classes Dog
, Athlete
, and ComputerSimulation
(each of which implemented a method run
). The selector could be used with an instance of each of the classes to invoke its run
method—even though the implementation might be different for each.
Compiled selectors are of type SEL
. There are two common ways to get a selector:
At compile time, you use the compiler directive @selector
.
SEL aSelector = @selector(methodName); |
At runtime, you use the NSSelectorFromString
function, where the string is the name of the method:
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.
You can invoke a method using a selector with performSelector:
and other similar methods.
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.)
标签:
原文地址:http://www.cnblogs.com/ERICSUN12/p/5720787.html