Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Объектные переменные экземпляров Objective-C

0

До настоящего момента переменные экземпляров, объявлявшиеся в наших классах, относились к простым типам С – таким, как int или float. На практике переменные экземпляров гораздо чаще содержат указатели на другие объекты. Объектная переменная экземпляра указывает на другой объект и описывает связь между двумя объектами. Как правило, объектные переменные экземпляров относятся к одной из трех категорий:

•  Атрибуты объектного типа: указатель на простой объект-значение – такой, как NSString или NSNumber. Например, фамилия работника из класса Employee будет храниться  в  объекте  NSString.  Соответственно  экземпляр  Employee содержит

переменную экземпляра, в которой хранится указатель на экземпляр NSString.

•  Отношения типа «один к одному»: указатель на один составной объект. Например, у работника может быть жена; в экземпляр Employee включается переменная экземпляра, которая содержит указатель на один экземпляр Person.

•  Отношения типа «один ко многим»: указатель на экземпляр класса коллекции – например, NSMutableArray. (Другие примеры коллекций встретятся нам в главе 21.) Например,  у  работника  могут  быть  дети;  в  экземпляр  включается  переменная экземпляра, которая содержит указатель на экземпляр NSMutableArray со списком указателей на один или несколько объектов Person.

В этом списке под NSString понимается «экземпляр класса NSString». Возможно, на первый взгляд такое сокращение выглядит непривычно, но оно очень широко распространено.

Рис. 19.1. Класс Employee с объектными переменными экземпляров

Как и на других диаграммах, указатели изображены стрелками (а также помечены именами переменных). Таким образом, класс Employee содержит три переменные  экземпляров:  lastName,  spouse  и  children.  Объявление  переменных экземпляров Employee будет выглядеть так:

@interface Employee : Person

{

int employeeID; NSString *lastName; Person *spouse;

NSMutableArray *children;

}

Все эти переменные, за исключением employeeID, являются указателями. Объектные переменные экземпляров всегда Являются указателями. Например, переменная  spouse содержит  указатель  на  другой  объект,  «живущий»  в  куче.

Указатель spouse хранится в объекте Employee, а объект Person, на который

он ссылается – нет. Объекты не хранятся внутри других объектов. Объект работника содержит свой табельный номер (переменная и само значение), но он только знает адрес, по которому в памяти хранится объект его жены.

У хранения в объектах указателей на объекты (вместо самих объектов) есть два важных побочных эффекта:

•  Один объект может принимать несколько ролей. Например, может оказаться, что объект жены работника также указан в качестве контактного лица в объектах детей.

Рис. 19.2. Один объект в нескольких ролях

•  В памяти программы хранится большое количество всевозможных объектов. Используемые объекты должны оставаться в памяти, но ненужные объекты должны уничтожаться    (их    память    должна    возвращаться    в    кучу    для    повторного

использования). Повторное использование памяти сводит к минимуму затраты памяти на выполнение программы, а компьютер быстрее реагирует на действия пользователя. На мобильных устройствах (например, iPhone) операционная система уничтожает программу, занимающую слишком много памяти.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии