选择器selector

在Objective-C中,选择器selector有两种含义。其一是当在源代码中向一个对象发送消息时,用它来引用一个方法的名字;其二是当源代码编译过后,用它来引用取代名字的唯一标识符。编译后的选择器类型为SEL。所有相同名字的方法都有相同的选择器。你可以使用选择器来调用对象的方法——这为在Cocoa中实现target-action设计模式打下了基础。

方法和选择器

为了提高效率,在编译后的代码中,方法选择器不会使用完全ASCII名字。编译器将每个方法的名字写入一张表,然后将该名字与该方法在运行时的唯一标识符配对。运行时系统确保每个标识符都是唯一的:不存在相同的两个选择器,同名的所有方法都有相同的选择器。

SEL和@selector

编译后的选择器被赋予一个特殊类型,SEL,以区别于其他数据。有效的选择器永远不会为0。你必须让系统来给方法赋予SEL标识符,对它们的随意指定是无效的。

@selector指令可以用来引用编译后的选择器,不采用方法的完全名字。下例中,setWidth:height:的选择器被赋给了setWidthHeight变量:

[cpp]  view plain copy
  1. SEL setWidthHeight;  
  2. setWidthHeight = @selector(setWidth:height:);  
在编译时使用@selector指令为SEL变量赋值非常高效。在某些情况下,可能需要在运行时将一个字符串转换为一个选择器,这时可以使用NSSelectorFromString函数来实现:

[cpp]  view plain copy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值