美文网首页
Runtime随笔(一) 消息机制

Runtime随笔(一) 消息机制

作者: JustCompile | 来源:发表于2017-07-23 11:35 被阅读0次

    最近面试,总是被问到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,就是实现,最终我们就完成了这个方法的调用,未完待续...

    相关文章

      网友评论

          本文标题:Runtime随笔(一) 消息机制

          本文链接:https://www.haomeiwen.com/subject/jaopkxtx.html