在2009年发布的名为Apple 的Objective-C 2.0编程语言的Objective C 2.0的官方文档中,有一个关于类对象的段落在第28页.
我不明白Class Objects是什么,以及如何定义它们除了语言的其余部分以及它们具有什么属性.在同一文档中,它解释了Objective-C 2.0中的所有内容都是一个对象,该对象基本上是指向struct包含isa字段的指针,指针本身是类型id.由此我推断:
struct通过id和isa字段
链接那些isa指向nil对象的方式构造字段.id 是Objective C 2.0中几乎所有内容的有效数据类型isa指针之后/下方开始打包的假设我得到了Objective C 2.0的工作原理,什么是类对象,它与实例的创建方式有何不同?类对象提供的实例没有什么类型的属性?你可以与C或C++并行吗?
好的,那么你定义一个类。我们称他为查理:
\n\n@interface Charlie : NSObject\n@end\nRun Code Online (Sandbox Code Playgroud)\n\n我们的小班来啦!由于 \xe2\x80\x94 与 Obective-C \xe2\x80\x94 Charlie 中的所有其他类一样是一个对象,因此您可以向它发送消息,例如[Charlie alloc]让 Charlie 为您分配一个实例。这就是我们所说的类对象的含义:它是代表您定义的类的对象。
Objective-C 中的对象是什么?类是基于此结构定义的:
\n\nstruct objc_object {\n Class isa OBJC_ISA_AVAILABILITY;\n};\nRun Code Online (Sandbox Code Playgroud)\n\n类由如下结构表示:
\n\nstruct objc_class { \n struct objc_class *isa; \n struct objc_class *super_class; \n // A bunch of other members \xe2\x80\xa6\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如您所见,两者都以isa引用类开始。所以类只是普通对象的扩展。
当 Charlie 创建一个实例时,该实例isa将指向 Charlie。但查理的是什么isa意思是什么?嗯,它指向一个元类。元类是一个奇怪的东西 \xe2\x80\x94 它是一种特殊的类,其存在只是为了充当类的类。你永远不会直接与它互动;当你与它的唯一实例 Charlie 交互时,它只是履行其优雅的职责\xe2\x80\xa0。
这就是当我们谈论类对象 \xe2\x80\x94 时的意思,它只是代表您在代码中定义的类的对象。
\n\n\xe2\x80\xa0 您可能想知道类的职责是什么。嗯,最明显的问题是这就是你创建对象的方式。但除此之外,Objective-C 中的实例不拥有自己的方法。相反,方法解析是根据对象的isa,因此类最重要的功能除了为您创建实例之外,就是确定您的对象具有哪些方法。
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |