我的理解是,除了分配内存之外,alloc
还将所有实例变量(isa
变量除外)设置为零或等于零的等效类型,例如nil
,NULL
,并0.0.
alloc/init和实例变量的设置
但最近,我读了以下有关init:
初始化设置实例对象的 变量合理 和有用的初始值。
我有点困惑,什么是“合理的和有用的初始值”是指....
如果alloc
已经设置的值为零,则init
以任何方式改变这些值?
我的理解是,除了分配内存之外,alloc
还将所有实例变量(isa
变量除外)设置为零或等于零的等效类型,例如nil
,NULL
,并0.0.
alloc/init和实例变量的设置
但最近,我读了以下有关init:
初始化设置实例对象的 变量合理 和有用的初始值。
我有点困惑,什么是“合理的和有用的初始值”是指....
如果alloc
已经设置的值为零,则init
以任何方式改变这些值?
如果页头已设置的值为零,是初始化以任何方式改变这些值?
当然。例如,您可能有一个对象代表一个带有ivars的矩形来表示宽度和高度;在init
中,你可以将这些ivars初始化为一些理智的默认值,比如300x200。
这就是他们正在谈论的。
如果你问的是NSObject的-init
方法是否将子类的ivars的值初始化为某些非零值,那么答案当然是否定的。
是的,这是完全可能的。例如,一个数据结构可能有成员变量,这些成员变量也需要分配和初始化动态内存。调用alloc
将为成员变量保留空间,调用init
将使这些值有用(例如,子分配&初始化)。
alloc
和init
是分开的,因为对于以不同方式初始化对象的类,可以有多个init
例程。
您也可以通过拨打new
同时致电alloc
和init
。因此,下面两行是等价的:
[[NSObject alloc] init];
[NSObject new];
所以我读的引用是指*方便*初始值设定项而不是NSObject的-init。 这正是我想知道的......谢谢! – ChrisR 2009-12-02 22:57:27