alloc / init和实例变量的设置

时间:2009-12-02 21:45:27

标签: objective-c initialization allocation

据我了解,除了分配内存外,alloc还将所有实例变量(isa变量除外)设置为零或将等效类型设置为零,例如{ {1}},nilNULL

但我最近阅读了以下有关0.0.

的内容
  

初始化设置实例   对象的变量是合理的   和有用的初始值。

我对“合理有用的初始值”意味着什么感到困惑....

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

2 个答案:

答案 0 :(得分:3)

  

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

不确定

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

这就是他们所说的一切。

如果您在询问NSObject的-init方法是否正在将子类的ivars的值初始化为某些非零值,那么答案当然是否定的。

答案 1 :(得分:0)

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

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

您也可以致电alloc同时致电initnew。因此,以下两行是等效的:

[[NSObject alloc] init];
[NSObject new];