0

id 在 Objective-C 中,对象标识符是一种不同的数据类型:id。这种类型是任何类型的对象的通用类型,无论类如何,并且可以用于类的实例和类对象本身。

id anObject;

到这里它简单明了


对于 Objective-C 的面向对象构造,例如方法返回值,id 替换 int 作为默认数据类型。(对于严格的 C 构造,例如函数返回值,int 仍然是默认类型。)

不明白它所说的 id 取代 int 是什么?并且在最后一个括号内的 int 仍然是默认值?


关键字nil被定义为一个空对象,一个值为0的id。id、nil以及Objective-C的其他基本类型在头文件objc/objc.h中定义。

id 被定义为指向对象数据结构的指针:

typedef struct objc_object {
    Class isa;
} *id;

以上不是 obj-c 语法它是什么以及它在解释什么?


因此,每个对象都有一个 isa 变量,告诉它它是什么类的实例。由于 Class 类型本身定义为指针:

typedef struct objc_class *Class;

isa 变量通常被称为“isa 指针”。</p>

最后一段也没看懂。

4

2 回答 2

3

对于 Objective-C 的面向对象构造,例如方法返回值,id 替换 int 作为默认数据类型。(对于严格的 C 构造,例如函数返回值,int 仍然是默认类型。)

你的书在这里有点混乱。它只是说,如果您正在使用对象并且您不想变得更具体,那么这id是一种很好的数据类型。

id 被定义为指向对象数据结构的指针:

typedef struct objc_object {
    Class isa;
} *id;

以上不是 obj-c 语法它是什么以及它在解释什么?

那是对象的内部表示。你的书试图证明一个客观的 C 对象不是魔法:在表面之下它只是一个结构。数据类型id是指向这种结构的指针。

因此,每个对象都有一个 isa 变量,告诉它它是什么类的实例。由于 Class 类型本身定义为指针:

typedef struct objc_class *Class;

isa 变量通常被称为“isa 指针”。</p>

在其内部数据结构中,每个对象都有一个指向另一个表示其类的对象的指针。

如果你只是对 Objective-C 编程感兴趣(至少在你学习的时候不需要),你不需要知道这些东西。如果您正在做一些高级的事情,例如当您直接与 Objective-C 运行时交互时,它确实会派上用场。

于 2012-06-06T08:15:53.890 回答
1

不明白它所说的 id 取代 int 是什么?

Objective-C 是 C 的超集。

在 C 中,函数必须有返回值。如果未指定返回值,则函数int默认返回。

Objective-C 会覆盖 C 的这种默认行为,并id从任何未指定其返回值的类方法作为默认值返回。但同时保持其他(C-)函数的默认行为相同(即int仍然是其他所有函数的默认返回值)

于 2012-06-06T08:09:16.670 回答