gpt4 book ai didi

objective-c - objc_msgSend() 是使 Objective-C 面向对象的重要部分吗?

转载 作者:太空狗 更新时间:2023-10-30 03:32:26 25 4
gpt4 key购买 nike

在阅读文档时,我想知道 objc_msgSend() 是否真的是提供使 Objective-C 成为“面向对象”的功能的“核心技术”。也许有人可以更详细地解释哪些其他部分可以实现 Objective-C 的面向对象范例?

最佳答案

不完全是。

Objective-C 是面向对象的,仅仅是因为它将数据和功能封装到一个容器中;一个类(class)。

这几乎就是“面向对象编程”的全部内容。

现在,有许多不同类型的面向对象编程,一个关键方面是一种语言是否使用动态或静态调度。

在静态调度语言中——C++ 是最好的例子(是的,我知道它有提供动态调度形式的虚拟方法)——方法调用在编译时连接起来,在运行时不能改变。也就是说,将用于完成方法调用的方法的实现在编译期间是固定的,不能在运行时更改。

使用像 Objective-C 这样的动态调度语言,每次方法调用发生时都会确定用于完成方法调用的方法的实现。因此,通过使用类别或运行时的 API,可以在应用程序运行时更改方法的实现(例如,这实际上是键值观察的工作方式)。

objc_msgSend() 是执行动态分派(dispatch)的 Hook 。它引用一个对象或类和一个方法名——一个选择器或 SEL,因为它被称为——并在对象或类上查找通过该方法名的实现。一旦找到实现,就会调用它。

如果没有找到实现,objc_msgSend() 将采取一系列步骤来查看类或实例是否想以某种方式处理无法识别的方法调用,从而允许一个对象代替另一个对象(代理)或类似功能。

它的意义远不止于此。我建议你阅读 Apple's documentation for more information .

关于objective-c - objc_msgSend() 是使 Objective-C 面向对象的重要部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1835619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com