Создание объекта

Объект входит в существование во время выполнения посредством двухступенчатого процесса, выделяющего память для объекта и устанавливающего его состояние в разумные начальные значения. Для выделения объекта Objective C отправьте alloc или allocWithZone: обменивайтесь сообщениями к классу объекта. Время выполнения выделяет память для объекта и возвращает «необработанный» (неинициализированный) экземпляр класса. Это также устанавливает указатель (известный как isa указатель) к классу объекта, обнуляет все переменные экземпляра к соответственно введенным значениям и устанавливает объект, сохраняют количество к 1.

После выделения объекта необходимо инициализировать его. Инициализация устанавливает переменные экземпляра объекта к разумным начальным значениям. Это может также выделить и подготовить другие глобальные ресурсы, необходимые объекту. Вы инициализируете объект путем вызова init метод или некоторый другой метод, имя которого начинается init. Эти методы инициализатора часто имеют один или несколько параметров, позволяющих Вам указать начинающиеся значения переменных экземпляра объекта. Если эти методы преуспевают в том, чтобы инициализировать объект, они возвращают его; иначе, они возвращаются nil. Если класс объекта не реализует инициализатор, время выполнения Objective C вызывает инициализатор самого близкого наследователя вместо этого.

Art/object_creation.jpg

Форма выражения создания объекта

Соглашение в программировании Какао состоит в том, чтобы вложить вызов выделения в вызове инициализации.

MyCustomClass *myObject = [[MyCustomClass alloc] init];

При создании объекта с помощью этой формы необходимо проверить, что возвращенное значение не nil перед продолжением. В управляемом коде памяти должны быть освобождены переменные экземпляра объекта и другая выделенная память, прежде чем тот объект сам выпущен.

Импликации управления памятью

В коде, явно управляющем памятью, выделением и процедурой инициализации, возвращает объект с сохранить количеством 1. Это означает, что клиент, получающий объект теперь, «владеет» объектом и ответственен за выпуск его. Вы выпускаете его путем отправки ему a release или autorelease сообщение; последнее сообщение вызывает задержанный выпуск. Если Вы не выпустите объекты, которыми Вы владеете, то Ваша программа пропустит память.

Методы фабрики

Метод фабрики является методом класса, как удобство клиентам, создающим экземпляр класса. Метод фабрики комбинирует выделение и инициализацию за один шаг и возвращает автовыпущенный экземпляр класса. Поскольку полученный объект автовыпущен, клиент должен скопировать или сохранить экземпляр, если это хочет, чтобы он сохранился в памяти. Имена методов фабрики имеют следующую начальную форму:

+ (id)typeRemainderOfMethodName

где тип является именем класса минус префикс, и RemainderOfMethodName часто начинает With или From. Например,

+ (id)dataWithContentsOfURL:(NSURL *)url;

Необходимые как условие статьи

Категорическое обсуждение