In most object oriented languages, allocating memory for an object and initializing it is an atomic operation:
// Both allocates memory and calls the constructor MyClass object = new MyClass();
In Objective-C, these are separate operations. The class methods
alloc (and its historic sibling
allocWithZone:) makes the Objective-C runtime reserve the required memory and clears it. Except for a few internal values, all properties and variables are set to 0/
The object then is already "valid" but we always want to call a method to actually set up the object, which we call an initializer. These serve the same purpose as constructors in other languages. By convention, these methods start with
init. From a language point of view, they are just normal methods.
// 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];