Циклы удержания
Почему мы используем в этом примере именно табличные представления? Во-первых, потому, что это самый распространенный случай, во-вторых, это просто сделать с помощью небольшого по объему кода, и, в-третьих, этот вариант представления вам уже хорошо знаком.
Наш класс LanguageListController — вполне обычный класс контроллера табличного представления. Его назначение — отображать список элементов и уведомлять контроллер детализированного представления (с помощью соответствующего указателя) о том, что выбор сделан. Отредактируйте файл LanguageListController.h, добавив в него следующие выделенные строки.
Эти добавления определяют указатель на контроллер детализированного представления (который мы установим из кода в самом контроллере детализированного представления, когда будем готовы отображать список языков), а также два массива для хранения отображаемых значений ("English", "French" и т.д.) и тех значений, которые будут использованы для построения URL, взятых из выбранного языка ("еп" "fr" и т.д.).
Если бы вы скопировали этот код из архива исходного кода данной книги (или электронной книги) и вставили в свой проект или если бы вы ввели его сами, то, скорее всего, не заметили бы важное отличие объявления свойства detailViewController от его предыдущего варианта. В отличие от большинства свойств, которые ссылаются на объектный указатель, мы объявили это свойство с атрибутом assign, а не с атрибутом retain. Это вызвано необходимостью избежать цикла удержания (retain cycle).
Что такое цикл удержания? Это ситуация, при которой несколько объектов (два или больше) циклически удерживают друг друга. У каждого из этих объектов значение счетчика ссылок удержания (retain counter) больше или равно единице, и, следовательно, он никогда не будет освобождать указатели, которые содержит, поэтому такие указатели никогда не будут освобождены. Элемент с индикатором продолжения More Settings (Другие настройки) позволяет пользователю перейти еще к одному пакету параметров. Это дочернее представление может иметь такие же управляющие элементы, что и родительское, а также собственное дочернее представление. Вероятно, вы заметили, что приложение Settings использует контроллер навигации, который служит для поддержки структуры иерархических представлений параметров.
- Дата: 18-12-2014, 15:01