IOS选择器(selector)
前言
今天写异型进度条的时候用到了定时器NSTimer,其中定时器的启动是这么写的:
1 _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 2 target:self 3 selector:@selector(circleAnimationTypeOne) 4 userInfo:nil 5 repeats:YES];
其中各个参数含义不难理解,但是selector这种标识第一次见到,今天的主题就是对selector的学习
详述
Selector是一个对象中用来选择方法来执行的名字,或者是当源代码编译时候用来替换名字的唯一的标示。Selector自己并不能做任何事情。它简单的标示了一个方法。使得selector方法名称不同于普通字符串的唯一的事情是编译器确定selectors是独特的。使得selector有用的是(与运行时结合)它扮演着类似于一个动态函数指针,对于一个已经给与的名字,自动指向类所使用的适用的方法的实现。假设我们有一个run方法的selector,并且类Dog,Athlete和ComputerSimulation(每个类都实现了run方法)。Selector能够被每一个类的实例所使用并且调用它的run方法--设置方法的实现可能是互不相同的。
如何取得SELECTOR
被编译的selectors是SEL类型的。有两种方式获得selector:
·在编译期,我们使用编译标示@selector
1 SEL aSelector = @selector(methodName);
·在运行时,我们使用NSSelectorFromString方法,字符串是方法名:
1 SEL aSelector = NSSelectorFromString(@"methodName");
当我们想要我们的代码发送一个知道运行时我们才知道名字的消息的时候,我们使用selector创建一个字符串。
如何使用SELECTOR
我们能够调用以selector为参数的performSelector:的方法并且其他类似的方法来使用:
1 SEL aSelector = @selector(run); 2 [aDog performSelector:aSelector]; 3 [anAthlete performSelector:aSelector]; 4 [aComputerSimulation performSelector:aSelector];
(我们使用这个技术在特殊的情况下,例如我们实现了一个使用target-action设计模式的对象。通常,我们直接的简单的调用该方法。)