前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS RunTime之一:简介

iOS RunTime之一:简介

作者头像
s_在路上
发布2018-09-11 17:12:21
3700
发布2018-09-11 17:12:21
举报
文章被收录于专栏:iOS 开发杂谈iOS 开发杂谈

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,执行编译的代码,进行消息发送和转发。Objective-CRuntime其实是一个Runtime库,它基本上是用C和汇编写的,这个库使得C语言有了面向对象的能力。

下面通过分析Apple开源的Runtime代码来深入理解Objective-CRuntime机制。

记得初学Objective-C时,把[object doSomething]当成一个简单的方法调用,而无视了“发送消息”这句话的深刻含义。后来对Runtime的理解慢慢增加了,逐渐明白了[object doSomething]的含义。 当执行[object doSomething]会被编译器转化为:

代码语言:javascript
复制
objc_msgSend(receiver, selector)

如果消息含有参数,则为:

代码语言:javascript
复制
objc_msgSend(receiver, selector, arg1, arg2, ...)

如果消息的接收者能够找到对应的selector,那么就相当于直接执行了接收者这个对象的特定方法;否则,消息要么被转发,或是临时向接收者动态添加这个selector对应的实现内容,要么就干脆玩完崩溃掉。

现在可以看出[receiver message]真的不是一个简简单单的方法调用。因为这只是在编译阶段确定了要向接收者发送message这条消息,而receive将要如何响应这条消息,那就要看运行时发生的情况来决定了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.06.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档