Runtime学习笔记

RunTime学习

1. 将OC代码转化成C++代码

使用终端,cd到目标文件夹,再执行clang命令,例如 clang -rewrite-objc main.m

main.m转换成C++代码

可见,源码中,NSObject调用alloc方法以分配内存,实际上是给NSObject类发送alloc消息,objc_msgSend函数有多个参数,第一个参数是给谁发送消息,也就是谁在调用方法,第二个参数是调用什么方法,注册方法编号,然后根据方法编号在内存空间中找到对应的方法列表中的方法,再根据方法列表中的方法找到方法区中对应的方法实现,后面的参数是方法的参数。

2. 消息机制

使用runtime,需要导入<objc/message.h>,该库内部引入了<objc/runtime.h>,然后build Setting -> 搜索 msg -> 设置为NO

3. 方法交换

使用runtime,可以在运行时交换两个方法的实现,这也就是传说中的苹果黑魔法。

添加UIImage分类,在分类中的load方法中实现方法交换,方法交换的前提是需要有两个方法,所以自己需要写一个方法。


Snip20161022_7.png

方法交换过程:


方法交换思路图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,883评论 0 9
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 9,111评论 7 64
  • 我们都知道OC是一门动态语言,那么什么是动态语言呢?动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,...
    闫仕伟阅读 3,652评论 0 4
  • 前言 runtime其实在我们日常开发过程中很少使用到,尤其是像我现在比较初级的程序猿就更用不到了。但是去面试很多...
    WolfTin阅读 4,101评论 0 2
  • 碧水晚秋凉,苍山落叶黄。五年来、再赏西塘。湖畔菊花犹正艳,游人醉,沁心香。 新旅古楼旁,旧人烟雨廊。景如初、故友何...
    西楚大少爷阅读 4,090评论 31 117

友情链接更多精彩内容