OC-Runtime

Cocoa 中大多数类都继承于NSObject类,也就自然继承了它的方法。最特殊的例外是NSProxy,它是个抽象超类,它实现了一些消息转发有关的方法,可以通过继承它来实现一个其他类的替身类或是虚拟出一个不存在的类,说白了就是领导把自己展现给大家风光无限,但是把活儿都交给幕后小弟去干。

有的NSObject中的方法起到了抽象接口的作用,比如description方法需要你重载它并为你定义的类提供描述内容。NSObject还有些方法能在运行时获得类的信息,并检查一些特性.比如:
class返回对象的类;isKindOfClass:和isMemberOfClass:则检查对象是否在指定的类继承体系中;
respondsToSelector:检查对象能否响应指定的消息;
conformsToProtocol:检查对象是否实现了指定协议类的方法;
methodForSelector:则返回指定方法实现的地址。
OC是一种消息语言,传递消息的形式为【reciver message】,只有再运行时,运行环境才会将消息与方法的实现绑定在一起,也就是调用objc_msgSend函数,实现的过程大致为:
1.首先检测selector是不是要忽略的函数。
2.检测消息的接受者是不是nil对象,应为OC中nil对象可以接受任何方法而不会被Crash掉,应为会被做忽略处理。
3.如果上面两条都检查完毕,就找这个函数的IMP表,首先从cache里面找,如果有就直接执行相对应的函数。
4.如果没有找到,就找下一张函数分发表。
5.如果还是找不到,就继续找超类的函数分发表,一直找到NSObject类
6.如果还是找不到就要到动态方法解析,或者直接崩溃掉

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值