Объектное выделение

То, когда Вы выделяете объект, часть того, что происходит, - то, что Вы могли бы ожидать учитывая срок. Какао выделяет достаточно памяти для объекта от области виртуальной памяти приложения. Вычислять, сколько памяти для выделения это принимает переменные экземпляра объекта во внимание — включая их типы и порядок — как указано классом объекта.

Для выделения объекта Вы отправляете сообщение alloc или allocWithZone: к классу объекта. В свою очередь, Вы получаете «необработанный» (неинициализированный) экземпляр класса. alloc вариант метода использует зону приложения по умолчанию. Зона является выровненной страницей областью памяти для содержания связанных объектов и данных, выделенных приложением. См. Усовершенствованное Руководство по программированию управления памятью для получения дополнительной информации о зонах.

Сообщение выделения делает другие важные вещи помимо выделения памяти:

Объект isa переменная экземпляра наследована от NSObject, таким образом, это характерно для всех объектов Какао. После наборов выделения isa к классу объекта объект интегрируется в представление времени выполнения иерархии наследования и текущую сеть объектов (класс и экземпляр), которые составляют программу. Следовательно объект может найти любую информацию, в которой он нуждается во время выполнения, такое как место другого объекта в иерархии наследования, протоколы, которым другие объекты приспосабливают, и расположение реализаций метода, которые он может выполнить в ответ на сообщения.

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