Objective-C的非正式协议(Informal Protocol)和选择器(Selector)

0x01 非正式协议

“非正式协议”(Informal Protocol)可以视为“类别”的别称,即凡是NSObject或其子类的类别,都是“非正式协议”。

 

可以从Apple官方的开发者文档看到:

1、非正式协议中的方法是否实现是可选的,因此在调用非正式协议中的方法之前,需要去检查对象类是否实现了它;

2、在Objective-C 2.0中引入可选的正式协议方法之前,非正式协议是Foundation和AppKit类实现委托的唯一方式。

 

0x02 响应选择器

选择器(Selector)只是一个方法名称,但它以Objective-C运行时使用的特殊方式编码,以快速执行查询。 

可以使用@selector()编译指令圆括号中的方法名称来指定选择器:

//The selector for the Car method setEngine:
@selector(setEngine:)
//The selector for the setTire:atIndex:
@selector(setTire:atIndex:)

NSObject提供了一个名为respondsToSelector:的方法,该方法询问对象以确定其是否能够响应某个特定的消息:

Car *car = [[Car alloc] init];
if ([car respondsToSelector: @selector(setEngine:)])  //如果Car类对象存在setEngine:方法,则执行以下代码
{
 NSLog (@"yowza!");
}

选择器可以被传递,可以作为方法的参数使用,甚至可以作为实例变量被存储。

利用这些特性,可以编写一些非常强大和灵活的代码!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值