oc动态性, 运行时将代码转化为runtime的C代码

RunTime运行流程:

生成对应objc_msgSend方法 isa指针查看当前类有没有这个方法, 之后寻找父类, 每个方法SEL(方法选择器)对应IMP(类似于一个编号,是函数指针,指向函数实现,找到内存里对应函数),  直到NSObeject, 如果找不到IMP, 会进入消息转发机制, resolveClassMethod, resolveInstanceMethod, forwardingTargetForSelector, forwardInvocation 第一个方法所属类方法动态方法解析, 第二个和第一个类似,是对应实例方法的, 第三个是备援接受者, 第四个方法是消息重定向, 真正消息转发,也是Aspects的核心操作, 如果都找不到调用doesNotRecognizeSelector:方法抛出异常

RunTime的实际应用

交换方法(黑魔法.hook,让SEL1->IMP2,SEL2->IMP1),为系统类添加自定义方法,三方Aspects

①用方法交换添加保护, 如数组赋值时添加越界判断等等  ②统计页面点击数用  ③多继承  ④自动化归档(kvo)  ⑤NSTime内存泄漏(vc被释放通过消息转发找回vc)  ⑥系统类添加自定义方法, 写一些更便捷的代码,比如控件加手势,字典加加密方法,代码更简洁

最新文章

  1. PHP实现RTX发送消息提醒
  2. 解决AndroidADT自带Eclipse编辑器不能自动代码提示的问题。
  3. 模拟Executor策略的实现
  4. CentOS 6.8下安装MySQL 5.6.33
  5. Google浏览器导出书签
  6. python 函数默认值的小坑啊
  7. hdu 4634 Swipe Bo 搜索
  8. 知识库系统/知识管理系统 WCP
  9. Debug编辑通过转Release找不到命名空间
  10. BuildSigar
  11. [WP8] Binding时,依照DataType来选择DataTemplate
  12. input时间输入框小解
  13. json转javascript对象
  14. Linux 下安装 MATLAB
  15. Ubuntu安装jdk,正确配置环境变量
  16. hadoop环境搭建-伪分布模式
  17. C#程序集系列13,如何让CLR选择不同版本的程序集
  18. 简单的网络爬虫程序(Web Crawlers)
  19. 【转】数据库范式(1NF 2NF 3NF BCNF)
  20. 在CentOs6.5下安装Python2.7.6和Scrapy

热门文章

  1. PAT甲级1017题解——模拟排序
  2. SpringBoot项目的测试类
  3. 201671010442 葸铃 实验十四 团队项目评审&课程学习总结
  4. dependencies与devDependencies的区别----npm install
  5. First-class function
  6. HDU 6091 - Rikka with Match
  7. MongoDB远程连接-MongoDB Compass
  8. isopod dsl 框架管理kubernetes 配置
  9. kuma docker-compose 环境试用
  10. 在Linux下配置git并设置远程仓库