IOS OC的消息结构 和 运行期组件
IOS OC的消息结构 和 运行期组件
卧龙小 发表于2年前
IOS OC的消息结构 和 运行期组件
  • 发表于 2年前
  • 阅读 27
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: ​Objective-c 使用动态绑定的消息结构,在运行时才会检查对象类型,接受消息后,应该执行什么代码,有运行期环境而非编译器来决定

一消息结构 和 函数调用的区别

    Objective -C 是由Smalltal(70年代的语言)演化而来。Smalltal是最早的消息语言,消息结构和函数调用之间的区别如下:


1.1消息结构 (Objective-c)
NSObject *obj = [[NSObject alloc]init];
[obj performWith:参数1 and:参数2];


1.2 函数调用 (C++)
Object *obj = new Object;
obj->perform(parameter1,parameter2);


    两者主要的区别在于:消息结构的语言,运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,则由编译器决定。


    如果代码中调用的函数是多态的,函数调用的语言,会在运行时就要按照"虚方法表(virtual table)"来查出应该执行那个函数实现。而消息结构的语言,不论是否多态,总是在运行时才会去查找索要执行的方法。编译器甚至不关心接受消息的对象是何种类型。接受消息的对象也要在运行时处理,这个过程也叫"动态绑定"


二运行期组件(runtime component)

    Objective-c 的重要工作都是由运行期组件(runtime component)而非编译器来完成,使用Objective-C的面向对象特性所需的全部数据结构和函数都在运行期组件里面。


    例如:运行期组件中含有全部内存管理方法。运行期组件的本质上就是一种与开发者所编代码相链接的"动态库"(dynamic library),其代码能把开发者所编的所有程序粘合起来。这样的话,只需要更新运行期组件,就可以提升应用程序性能。而那种许多工作都在"编译器"完成的语言,想要获得类似的性能提升,则需要重新编译运用程序代码。


三总结

    Objective-c 使用动态绑定的消息结构,在运行时才会检查对象类型,接受消息后,应该执行什么代码,有运行期环境而非编译器来决定


共有 人打赏支持
粉丝 43
博文 146
码字总数 70107
×
卧龙小
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: