2009-12-02 91 views
2

我的理解是,除了分配内存之外,alloc还将所有实例变量(isa变量除外)设置为零或等于零的等效类型,例如nilNULL,并0.0.alloc/init和实例变量的设置

但最近,我读了以下有关init:

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

我有点困惑,什么是“合理的和有用的初始值”是指....

如果alloc已经设置的值为零,则init以任何方式改变这些值?

回答

3

如果页头已设置的值为零,是初始化以任何方式改变这些值?

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

这就是他们正在谈论的。

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

+0

所以我读的引用是指*方便*初始值设定项而不是NSObject的-init。 这正是我想知道的......谢谢! – ChrisR 2009-12-02 22:57:27

0

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

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

您也可以通过拨打new同时致电allocinit。因此,下面两行是等价的:

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