Selector(文档翻译)

作者: 張小明 | 来源:发表于2016-09-09 17:09 被阅读21次

    selector是一个用来 选择出对象要执行的方法 的名字,在源码编译后,是代替名字的一个唯一标记(unique identifier)。selector自己不会做任何事情,它只是标记一个method(It simply identifies a method)。编译器之所以不用字符串表示selector是为了确保selector名字的唯一性。在运行时(runtime)中,selector扮演动态函数指针的角色,对于一个给定的名称,自动的指向method作用的类对应的method的实现(implementation)。假设有一个run方法(method)的selector,和实现了run方法的三个类Dog,Athlete,ComputerSimulation。selector可以被任何这三个类的实例调用,即使他们的实现是不相同的。

    张小明注:很多书籍将selector解释为选择器,但是从功能上来看,小明觉得翻译成选择标记可能更准确。这里直接使用selector,method英文,便于读者理解和区分selector和method的不同。

    Getting a Selector

    编译后的selector的类型为SEL。有两种常见的方式获取到selector:

    @1在编译时(compile time),使用@selector指令

    SEL aSelector = @selector(methodName);

    @2在运行时(runtime),使用NSSelectorFromString函数,参数string是方法的名字

    SEL aSelector = NSSelectorFromString(@"methodName");

    当方法的名字直到运行时(runtime)才能获取时,就可以以这种方式发送消息

    Using a Selector

    我们可以通过performSelector:的方式调用一个方法,或者其他类似的方法

    SEL aSelector = @selector(run);

    [aDog performSelector:aSelector];

    [anAthlete performSelector:aSelector];

    [aComputerSimulation performSelector:aSelector];

    (只有在特殊的情况下才会使用这种方式,例如用target-action设计模式实现的对象。通常情况下,只需要单纯的调用方法即可)

    相关文章

      网友评论

        本文标题:Selector(文档翻译)

        本文链接:https://www.haomeiwen.com/subject/xcneettx.html