分配和初始化之間的區別
在大多數物件導向的語言中,為物件分配記憶體並初始化它是一個原子操作:
// Both allocates memory and calls the constructor
MyClass object = new MyClass();
在 Objective-C 中,這些是單獨的操作。類方法 alloc
(和它的歷史兄弟 allocWithZone:
)使 Objective-C 執行時保留所需的記憶體並清除它。除少數內部值外,所有屬性和變數都設定為 0 / NO
/ nil
。
然後物件已經有效但我們總是想呼叫一個方法來實際設定物件,我們稱之為初始化器。它們與其他語言的建構函式具有相同的用途。按照慣例,這些方法始於 init
。從語言的角度來看,它們只是常規方法。
// Allocate memory and set all properties and variables to 0/NO/nil.
MyClass *object = [MyClass alloc];
// Initialize the object.
object = [object init];
// Shorthand:
object = [[MyClass alloc] init];