转:Object-C 消息函数是如何工作的?
来源:互联网 发布:淘宝举证在哪里 编辑:程序博客网 时间:2024/06/06 05:36
关于这个问题, 在看object-c手册的时候大概已经知道答案了,只是没有想到object-c的解决方法真的是这样,和一般的脚本语言差不多,只是通过编译器实现了一层运行时系统. 我们知道, 在object-c里消息(成员函数)是运行期绑定的,编译器把类似 [receiver message] 的函数调用转换为,消息发送: objc_msgSend( receiver, selector ) 这里的selector就是在运行期绑定的成员函数, 可以想象selector是通过在继承体系中递归向上查找的,object-c仅仅在找到后做了一个cache,当消息具有多个参数时,也有如下转换: objc_msgSend( receiver, selector, arg1, arg2, … ) 为了便于在运行期决定selector, 每个objc类都维护了一个dispatch table, 通过名为isa的指针指向, 所有从NSObject继承的类都自动拥有isa指针. 下图是object-c里关于查找selector的过程: 为了效率考虑, 在编译后的代码中不使用函数字符串作为key来查找selector, 而是用过一个objc编译器保证唯一的标识符来做key查找,当然程序员可以使用字符串来查找, 例如: id someSelector = NSSelectorFromString( msgName ); 同时可以反向操作, 从一个selector返回其对应的函数名字: NSString* methodName = NSStringFromSelector( someSelector ); 基本上, 具备这个两个操作, objc就具有内省能力了.
http://blog.iieeg.com/siney/category/%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91/c/- 转:Object-C 消息函数是如何工作的?
- 【转】Object-C的函数调用机制详解--消息
- Object-C 消息机制工作原理
- Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Object-C的函数调用机制详解--消息
- Object.GetType()到底是怎么工作的
- jQuery 的 ready 函数是如何工作的?
- 自我执行的匿名函数是如何工作的
- C++中的虚函数是如何工作的?
- C 语言调试器是如何工作的?
- 扫盲:SSL是如何工作的?【转】
- 编译器是如何工作的?(转)
- 分析一下 Android 异步消息处理机制到底是如何工作的
- Object - C 的消息处理机制与 Method Swizzling(函数混淆)
- Object - C 的消息处理机制与 Method Swizzling(函数混淆)
- 模拟window Message Queue 消息队列 算法
- 0.0
- 今天考试考完了
- 程序员感触
- 转:在游戏引擎中嵌入Flash
- 转:Object-C 消息函数是如何工作的?
- java 学习的小感受
- 图片上传前本地预览_支持ie6、7、8、
- 新人报道
- 2010年12月TIOBE编程语言排行榜
- spinlock与linux内核调度的关系
- 最近接触的几个东东
- NO.1
- IT成功人生