在阅读文档时,我想知道objc_msgSend()实际上是否是交付使Objective-C“面向对象”的功能的“核心技术”。也许有人可以更详细地解释一下,还有哪些部分可以启用Objective-C的面向对象范例?
发布于 2009-12-03 08:05:56
不完全是。
Objective-C是面向对象的,因为它将数据和功能封装到一个容器中;一个类。
这就是“面向对象编程”的全部内容。
现在,有许多不同类型的面向对象编程,一个关键的方面是一种语言是使用动态还是静态分派。
在静态分派语言中-- C++是最好的例子(是的,我知道它有提供某种形式的动态分派的虚方法) --方法调用在编译时被连接起来,在运行时不能改变。也就是说,将用于完成方法调用的方法的实现在编译期间是固定的,并且在运行时不能更改。
使用像Objective-C这样的动态分派语言,将用于完成方法调用的方法的实现是在每次发生方法调用时确定的。因此,通过使用类别或运行时的API,可以在应用程序运行时更改方法的实现(例如,这实际上就是键值观察的工作方式)。
objc_msgSend()是执行动态分派的钩子。它接受对一个对象或类的引用&一个方法名--选择器或SEL,就像它所说的那样--并在该方法名所属的对象或类上查找实现。一旦找到实现,就会调用它。
如果没有找到实现,objc_msgSend()将采取一系列步骤来查看类或实例是否希望以某种方式处理无法识别的方法调用,从而允许一个对象替代另一个(代理)或类似的功能。
我建议你读一下Apple's documentation for more information。
发布于 2009-12-04 01:46:37
那是quite a bit more to it。
https://stackoverflow.com/questions/1835619
复制相似问题