Да, это вполне возможно. Например, структура данных может иметь переменные-члены, которые требуют динамической памяти, которая также выделяется и инициализируется. Вызов alloc
зарезервирует место для переменных-членов, а вызов init
сделает эти значения полезными (например, перераспределение и инициализация).
alloc
и init
являются отдельными, потому что вы можете иметь несколько подпрограмм init
для класса, которые инициализируют объект различными способами.
Вы также можете позвонить alloc
и init
одновременно, позвонив по номеру new
. Таким образом, следующие две строки эквивалентны:
[[NSObject alloc] init];
[NSObject new];