Runtime随笔(一) 消息机制

最近面试,总是被问到runtime,又或者问category能否添加属性,虽然之前接触过runtime,但只是简单的拿别人的文件直接copy到工程里面使用,比如“UIbutton+block”,“MJRrefresh”,json解析,等等。。。都没有系统的学习。

正好这个星期,一个朋友问我怎么样在项目里解决“被键盘遮住后视图上移”,并且是全局的,我第一反应就是category,然后又想了一下肯定要用到runtime,因为要给category添加属性,于是乎,我就系统的学习了一下runtime,这是第一篇,参考案例:

Runtime学习与使用(一):为UITextField添加类目实现被键盘遮住后视图上移

Objective-C Method Swizzling 的最佳实践

Objective-C Runtime 消息机制 - 代码背后发生的事情

其实这两篇文章已经把runtime讲解的非常清楚了,首先讲讲什么是ios runtime:

通俗的讲,我自己的理解,就是c语言的实现,其实我们写的oc代码都会被编译器转换成c语言代码,最直接的说明就是你使用clang “clang -rewrite-objc main.m” 编译一个.m文件,得到的结果是

然后打开文件,拉倒最后一行,可以看到


这是什么,这就编译后的代码,抽几个方法来读一下

objc_msgSend:字面意思是“发送消息”,那是干什么的呢,其实我们的oc进行方法的调用等等,其实就是消息的发送实现的,这就是Objective-C Runtime 消息机制。之前我也不是很理解什么叫做消息机制,怎么来通消息的,下面是重点:

runtime中类的定义


runtime中方法的定义



所以其实用c来解释就是一个叫obj_class的结构体在自己的方法列表“objc_method_list”寻找一个method_name叫“sayHello”的方法,然后调用这个“sayHello”的IMP,就是实现,最终我们就完成了这个方法的调用,未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,807评论 0 9
  • 前言 runtime其实在我们日常开发过程中很少使用到,尤其是像我现在比较初级的程序猿就更用不到了。但是去面试很多...
    WolfTin阅读 3,899评论 0 2
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,708评论 33 466
  • 成本不只有货币成本,要看到全部成本。当我们做决策时,我们要权衡的时全部成本。 买旧货时,货币成本虽然降低了,但是其...
    融化成黄油的老虎阅读 1,111评论 0 0
  • 我觉得人这一辈子最应该感恩的是父母,不管你的父母是否一直陪你到现在,是否一直看着你长大。我们最应该感恩的还是父母,...
    余生独走阅读 1,228评论 0 0