Цель C - разница между init и конструктором? - PullRequest
9 голосов
/ 29 августа 2011

Я пытаюсь найти разницу между init и конструктором в Objective C. Я не разработчик C, но мне нужно преобразовать некоторый Objective C-код в Java, и на самом деле я не могу понять разницу между вещи.

1 Ответ

23 голосов
/ 29 августа 2011

В Objective-C способ, которым объект оживает, делится на две части: распределение и инициализация .

Сначала вы выделяете память для вашего объекта, которая заполняется нулями (за исключением некоторых внутренних вещей Objective-C, о которых вам не нужно заботиться):

myUninitializedObjectPointer = [MyClass alloc];

Следующий этап - инициализация. Это делается с помощью метода, который начинается с init по соглашению. Вы должны придерживаться этого соглашения по разным причинам (особенно при использовании ARC), но с языковой точки зрения в этом нет необходимости.

myObjectPointer = [myUnitializedObjectPointer init];

или в одну строку:

myObjectPointer = [[MyClass alloc] init];

В других языках эти init методы называются конструкторами , но в Objective-C не обязательно, чтобы "конструктор" вызывался при выделении объекта. Вы обязаны вызвать соответствующий метод init. В таких языках, как C ++, C # и Java, распределение и инициализация настолько тесно связаны, что вы не можете выделить объект без его инициализации.

Итак, вкратце: методы init можно рассматривать как конструкторы, но только в соответствии с соглашением об именах, а не с применением языка. Для Objective-C это просто нормальные методы.

...