分配和初始化之間的區別

在大多數物件導向的語言中,為物件分配記憶體並初始化它是一個原子操作:

// 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];