gpt4 book ai didi

objective-c - Objective-C 2.0 中的类对象是什么?

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

Apple 于 2009 年发布的标题为 Objective-C 2.0 编程语言Objective C 2.0 官方文档中,第 28 页有一段关于类对象的内容.

我不明白类对象是什么,以及如何在语言的其余部分之外定义它们以及它们具有哪些属性。在同一文档中解释说,Objective-C 2.0 中的一切都是对象,该对象基本上是指向包含 isa 字段的 struct 的指针,指针本身是id 类型。据此我推断:

  • Obj-C 2.0 中的继承基本上包括通过 idisa 字段链接那些 struct
    • 父类(super class)对象以指向 nil 对象的方式构造 isa 字段。
  • id 是 Objective C 2.0 中几乎所有内容的有效数据类型
  • 定义类时,定义类本身的所有内容(方法和变量)都从 isa 指针之后/之下开始打包

假设我了解了 Objective C 2.0 的工作原理,什么是类对象以及它与创建实例的方式有何不同?类对象提供哪些实例没有的属性?你能与 C 或 C++ 并行吗?

最佳答案

OK,那么你定义一个类。我们称他为查理:

@interface Charlie : NSObject
@end

这是我们的小类(class)!由于与 Objective-C 中的所有其他类一样,Charlie 是一个对象,您可以向它发送消息,如 [Charlie alloc] 让 Charlie 为您分配一个实例。这就是我们所说的类对象的意思:它是代表您定义的类的对象。

Objective-C 中的对象是什么?类是基于这个结构定义的:

struct objc_object {
Class isa OBJC_ISA_AVAILABILITY;
};

类由这样的结构表示:

struct objc_class {         
struct objc_class *isa;
struct objc_class *super_class;
// A bunch of other members …
}

如您所见,两者都以引用类的 isa 开头。所以类只是普通对象的扩展。

当 Charlie 创建一个实例时,该实例的 isa 将指向 Charlie。但是 Charlie 的 isa 指向什么?嗯,它指向一个元类。元类是一种奇怪的东西——它是一种特殊的类,它的存在只是作为一个类的类。您永远不会直接与它互动;当您与它的唯一实例查理互动时,它只是履行其优雅的职责†。

这就是我们谈论类对象时的意思——它只是表示您在代码中定义的类的对象。

† 您可能想知道类的职责是什么。好吧,显而易见的大问题是它是您创建对象的方式。但除此之外,Objective-C 中的实例不拥有自己的方法。相反,方法解析是根据对象的 isa 完成的,因此除了为您创建实例之外,该类最重要的功能是确定您的对象具有哪些方法。

关于objective-c - Objective-C 2.0 中的类对象是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22105314/

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