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, только если счетчик ссылок достигает нуля. |