据我了解,除了分配内存外,alloc
还将所有实例变量(isa
变量除外)设置为零或将等效类型设置为零,例如{ {1}},nil
和NULL
但我最近阅读了以下有关0.0.
初始化设置实例 对象的变量是合理的 和有用的初始值。
我对“合理有用的初始值”意味着什么感到困惑....
如果init:
已将值设置为零,alloc
是否会以任何方式更改这些值?
答案 0 :(得分:3)
如果alloc已经将值设置为零,那么init是否以任何方式改变这些值?
不确定
例如,您可能有一个表示带有ivars的矩形的对象来表示宽度和高度;在init
中你可以将这些ivars初始化为一些理智的默认值,比如300x200。
这就是他们所说的一切。
如果您在询问NSObject的-init
方法是否正在将子类的ivars的值初始化为某些非零值,那么答案当然是否定的。
答案 1 :(得分:0)
是的,完全有可能。例如,数据结构可能具有成员变量,这些成员变量也需要分配和初始化动态内存。 alloc
调用将为成员变量保留空间,init
调用将使这些值有用(例如,子分配和初始化)。
alloc
和init
是分开的,因为对于以不同方式初始化对象的类,您可以有多个init
例程。
您也可以致电alloc
同时致电init
和new
。因此,以下两行是等效的:
[[NSObject alloc] init];
[NSObject new];