iOS消息机制

消息机制

RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。
对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 )。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找 到对应的函数来调用。

[obj makeText];

首先,编译器将代码[obj makeText];转化为objc_msgSend(obj, @selector (makeText));,在objc_msgSend函数中。首先通过obj的isa指针找到obj对应的class。在Class中先去cache中 通过SEL查找对应函数method(猜测cache中method列表是以SEL为key通过hash表来存储的,这样能提高函数查找速度),若 cache中未找到。再去methodList中查找,若methodlist中未找到,则取superClass中查找。若能找到,则将method加 入到cache中,以方便下次查找,并通过method中的函数指针跳转到对应的函数中去执行。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    萌萌的小伟哥阅读 489评论 0 0
  • 继上Runtime梳理(四) 通过前面的学习,我们了解到Objective-C的动态特性:Objective-C不...
    小名一峰阅读 219评论 0 2
  • 消息发送机制定义 OC的函数调用称为消息发送。OC的消息发送属于动态调用过程。即在编译的时候并不能决定真正调用哪个...
    富有的心阅读 37评论 1 1
  • 2017年07月12日21:09:00又学习 RunTime简称运行时就是系统在运行的时候的一些机制, 其中最主要...
    i张无张阅读 52评论 0 1
  • 刚才我们家父子之间上演了一场权力之争。回到家,爸爸手里拿着奶,儿子一进门就迫不及待要,鞋只脱了一只就向爸爸要。爸爸...
    jessie随心阅读 16评论 0 0