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