2

我的理解是,除了分配内存之外,alloc将所有实例变量(isa变量除外)设置为零或为零的等效类型,例如nil,NULL0.0.

但我最近阅读了以下关于init:

初始化将对象的实例变量设置为合理且有用的初始值。

我对“合理且有用的初始值”的含义有点困惑......

如果alloc已经将值设置为零,是否init以任何方式更改这些值?

4

2 回答 2

3

如果 alloc 已经将这些值设置为零,那么 init 是否会以任何方式改变这些值?

当然。

例如,您可能有一个表示矩形的对象,用 ivars 表示宽度和高度;init你可以将这些 ivars 初始化为一些正常的默认值,比如 300x200 。

这就是他们所说的。

如果您要问 NSObject 的-init方法是否将子类的 ivars 的值初始化为一些非零值,答案当然是否定的。

于 2009-12-02T22:05:58.840 回答
0

是的,这是完全可能的。例如,数据结构可能具有需要分配和初始化动态内存的成员变量。该alloc调用将为成员变量保留空间,并且该init调用将使这些值有用(例如,子分配和初始化)。

alloc并且init是分开的,因为您可以有多个init例程用于以不同方式初始化对象的类。

您也可以同时调用allocinit调用new。因此以下两行是等价的:

[[NSObject alloc] init];
[NSObject new];
于 2009-12-02T21:48:38.327 回答