11.4 Распределение и освобождение экземпляров

На верх  Назад  Вперёд

Синтаксическая диаграмма классов Objective-C показывает, что понятие конструктора и деструктора не поддерживается в Objective-C. Новые экземпляры создаются в два этапа:

1.Вызываем метод 'Alloc' (отправляем сообщение 'Alloc'): Это метод класса NSObject, и он возвращает указатель на область памяти для нового экземпляра. Использование alloc является соглашением в Objective-C.

2.Отправляем сообщение 'initXXX'. По соглашению, все классы имеют один или несколько методов 'InitXXX', который инициализирует все поля экземпляра. Этот метод возвращает конечный указатель на экземпляр, который может быть и Nil.

Следующий код демонстрирует это:

var

obj: NSObject;

begin

// Первое выделение памяти

obj := NSObject.alloc;

// Последующая инициализация.

obj := obj.init;

// Всегда проверяйте результат!!

if (Obj = Nil) then

  // Некоторые ошибки;

По соглашению, метод initXXX вернет Nil, если не удалось инициализировать некоторые поля, поэтому крайне важна проверка результата функции.

Аналогично, не существует выделенных методов-деструкторов. По соглашению, метод dealloc выполняет очистку экземпляров. Этот метод может быть переопределен для выполнения любой необходимой очистки. Destroy никогда не должен вызываться напрямую, вместо него должен вызываться метод release: Все экземпляры в Objective-C осуществляют подсчет ссылок, и release будет вызывать dealloc, только если счетчик ссылок достигает нуля.