Таблица жизненного циклаТакже как и протокольно-методная таблица, эта таблица есть у каждого типа, который соответствует протоколу. Содержит в себе реализацию четырех методов: allocate, copy, destruct, deallocate. Этими методами управляется весь жизненный цикл объекта. Рассмотрим на примере:
- При создании объекта ( Point(...) as Drawable) вызывается метод allocate из Т.Ж.Ц. этого объекта. Метод allocate решит, где должно быть размещено содержимое объекта (в буфере значений или на куче), и если он должен быть размещен на куче, то выделит необходимое количество памяти
- Метод copy поместит содержимое объекта в соответствующее место
- После окончания работы с объектом вызовется метод destruct, который убавит все счетчики ссылок, если таковые имеются
- После destruct будет вызван метод deallocate, который освободит выделенную на хипе память, если таковая имеется
Протокольно-методная таблицаКак было описано выше, содержит в себе реализации требуемых протоколом методов для типа, к которому эта таблица привязана.
Экзистенциальный контейнер - ОтветыТаким образом мы ответили на поставленные два вопроса:
- Протокольно-методная таблица хранится в Экзистенциальном контейнере этого объекта и может быть без труда из него получена
- Если тип элемента массива является протоколом, то любой элемент этого массива занимает фиксированное значение в 5 машинных слов - именно столько необходимо для Экзистенциального контейнера. Если содержимое элемента не может быть помещено в буфер значений, то он будет размещен на куче. Если может, то все содержимое будет размещено в буфере значений. В любом случае мы получим, что размер объекта с типом протокола равен 5 машинным словам (40 бит), а из этого следует, что все элементы массива будут иметь одинаковый размер.