初始化方法的定義
新追加的實例變量有時需要被初始化。另外,子類也可能需要同父類不同的初始化方法。這些情況下就需要爲子類定義自己的初始化方法。
子類中重寫init初始化方法的時候,通常按照以下邏輯。其他以init開頭的初始化方法也是同理。
- (id)init {
self = [super init] //一定要在第一行調用父類 的init的方法。
if (self != nil) { //父類返回了初始化好的實例時。
... //子類專有的初始化操作
}
return self;
}
如果所有的類的初始化方法都這樣寫,那麼根類NSObeject的init方法就一定會被執行。否則生成的對象就無法使用。。與此同時,這樣做也可以防止漏掉父類中定義的實例變量的初始化。
執行的時候父類的初始化方法可能會出錯。出錯時則會返回nil,這種情況下子類也不需要再進行初始化,直接返回nil就可以了。
生成實例對象的方法alloc會把實例對象的變量都初始化爲0(實例變量isa除外)。所以,如果子類中新追加的實例變量的初值可以爲0,則可以跳過子類的初始化。