OC中的method其实是一个结构体

struct objc_method{

SEL method_name

char *method_types

IMP method_imp

}

SEL是方法名,IMP其实就是一个C函数的指针,可以直接强制转换的,runtime中的IMP可以直接操作这些函数

方法调用流程:Objective-C 消息转发都会转发为objc_msgSend(receiver,@selector(message))

iOS 设备流畅基于runtime和runloop,高效的消息转发机制

寻找IMP的过程():在当前class方法缓存(cache methodLists)里寻找,再去当前类的方法列表(methodLists)里查找,找到后

添加到缓存列表里,没有继续往下执行,再去父类的缓存列表和方法列表里查找,直到找到基类为止

消息转发过程:

1.+(BOOL)resolveInstanceMethod:(SEL)sel和+(BOOL)resolveClassMethod:(SEL)sel;

2.-(id)forwardingTargetForSelector:(SEL)sel

3.-(void)forwardInvocation:(NSInvocation *)anInvocation

若3次拯救机会返回NO,就会抛出异常或者崩溃

最新文章

  1. 比较评测epoll,select,and poll 时间机制
  2. Xenko基础API笔记2-Enum Keys按键
  3. Another app is currently holding the yum lock; waiting for it to exit...
  4. linux命令细究
  5. linux 中的快捷键
  6. 录制游戏视频——fraps
  7. Qt5.0.2无法发布问题
  8. Android Studio使用技巧
  9. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
  10. object-c 内存管理机制的学习
  11. 为什么C++中声明和定义要分开写
  12. Progressive Web Apps入门
  13. Apache万网SSl证书安装不成功的一个注意事项(https安全链接,基于phpstudy)
  14. js学习(六)- js对象创建
  15. 在html中控制自动换行
  16. .NET实现事务的编码方式
  17. NYOJ 最大和
  18. SSM集成Easyui框架及多模块开发的认识
  19. 排序算法之直接插入排序Java实现
  20. bzoj1814: Ural 1519 Formula 1 动态规划 插头dp

热门文章

  1. U3D OnDrawGizmos
  2. Xcode8 问题
  3. linux系统中的变量
  4. Ubuntu命令行下安装、卸载、管理软件包的方法
  5. 关于更新vs2017后发布的问题 命令“bower install”已退出,代码为 9009
  6. octomap相关
  7. css中的三种基本定位机制
  8. block functions区块函数插件的定义与使用
  9. ADF文件数据结构解析和ADF文件读写
  10. XJOI 3578 排列交换/AtCoder beginner contest 097D equal (并查集)