分配和初始化之间的区别

在大多数面向对象的语言中,为对象分配内存并初始化它是一个原子操作:

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