2009-12-02 101 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];