Selector(文档翻译)

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设计模式实现的对象。通常情况下,只需要单纯的调用方法即可)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,860评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 6,595评论 0 7
  • 本文转载自:http://southpeak.github.io/2014/11/03/objective-c-r...
    idiot_lin阅读 2,929评论 0 0
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,087评论 7 64
  • ‘你只是看起来很努力’ 这句话我第一次听说,是从朋友的口中以玩笑的语气说的。不知道为什么,它就这样住在了我的心里...
    奔走在路上阅读 1,761评论 0 3