【发布时间】:2014-04-28 22:29:22
【问题描述】:
我需要清除一些杂乱的想法才能理解 objc_msgSend()。 请慷慨地提供详细的答案。 :)
这是我对 Apple Doc 的理解。
当向对象发送消息时,消息传递函数如下 对象的 isa 指针,指向它在其中查找的类结构 调度表中的方法选择器。如果找不到选择器 在那里,objc_msgSend() 跟随指向超类的指针(这里是 混乱)并试图爬上类层次结构。
在这里,超类是否获得了内存分配和该超类可用的 isa 指针?上面的引文是这样说的吗?
【问题讨论】:
-
它没有说明分配,每个对象都有一个 isa 指针,所以不清楚你在这里说的是哪个 isa。你能澄清一下你的意思吗?
-
你可以阅读source code
-
@Chuck 这需要一些澄清恕我直言,每个对象都有一个类(这是一个简单的结构),每个类都有一个 isa 指针。
-
@Chuck 并非每个对象都有一个 isa“指针”。标记的对象,而在 ARM64 上,isa 变量 不是指针,它根本不存在。您应该始终使用
object_getClass来获取对象的类,并且永远不要依赖 isa 指针。 -
@Chandu:这与您引用的段落没有任何关系。我想也许你把一个类的 isa 和它的实例的 isas 混淆了。每个类都有一个 isa,所以每个类都有一个 isa,但实例本身只有一个。
标签: ios objective-c