Мне кажется, что документация по этому вопросу неясна:
Скажем, вы работаете с iOS (НЕ для Mac, нет необходимости упоминать различия).Скажем, это строго 4.0+ (не нужно упоминать различия в старых ОС).Скажем, мы загружаем NIB строго автоматически.
Скажем, у вас есть UIViewController, BigView.Скажем, в NIB-файле есть дюжина так называемых «элементов верхнего уровня» ... это могут быть пользовательские элементы управления, изображения или что-то еще.
Скажем, вы определенно собираетесь явно создать и затем избавитьсяBigView несколько раз во время запуска приложения.Итак:
Для одного из этих элементов верхнего уровня в NIB существует три возможности :
(1) У вас нет какого-либо вида IBOutlet для него, вообще.
(2) У вас есть подключенный IBOutlet - но не свойство.
(3) У вас есть подключенное свойство IBOutlet (чтобы избежать путаницы, скажемсвойство сохранения).
Так что же происходит с элементом при выпуске BigView?
В случае (3) кажется очевидным, что вы должны освободить явно.Если вы этого не сделаете, он будет зависать после исчезновения вида.Нет проблем.
В случае (1) Я предполагаю (, но может ли кто-нибудь на самом деле подтвердить? ), что элемент будет выпущен после исчезновения BigView.
В случае (2) непонятно, что происходит .......
Глядя на общеизвестную справочную ссылку: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html это очень сомнительно:
"В iOS код загрузки пера использует метод setValue: forKey: для повторного подключения каждой розетки. Этот метод аналогичным образом ищет подходящий метод доступа и [ТАК, ЧТО ПРОИСХОДИТ, ЕСЛИ ЕСТЬ ISN'T ONE ?? TELL US APPLE ...] прибегает к другим средствам, когда это не удается ... [ХОРОШИЙ ГРИФ!] "
И посмотрите эту документацию: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html и прокрутите внизto "Сохранение объектов пера"
Итак ...
"Объекты в файле пера создаются с счетом сохранения 1 и затем автоматически высвобождаются" Fantastic ..
Но подождите!Прочтите несколько слов ...
однако ..., который использует доступный метод установки или сохраняет объект по умолчанию, если метод установки недоступен
Чтоо чем они говорят?
Имеют ли они в виду, что если нет доступного сеттера (ivar, но нет свойства), то он ОПЯТЬ RETAINED (кроме слова «сохранить», о котором они только что упоминали впредыдущее предложение) --- или они просто повторяются, то есть "сохраняет объект по умолчанию" - это то же самое, что "сохраняют", о котором они говорили ранее ("создано с счетом сохранения 1, а затем автоматически выпущено").
И зачем им даже упоминать об авто-выпуске, если этого не происходит?
Действительно, если кто-то действительно знает ответ на этот вопрос ...... какЗнаете ли вы?!? Вы спрашивали DTS, или через тестирование, или?Я полагаю, ключевая документация (только что вставленная) агрессивно неясна.
Опять же - если у вас есть IBOutlet, , но не свойство , связанное с объектом "верхнего уровня".. вы несете ответственность за его выпуск?Сохранено ли это? в этой ситуации?
В этом отношении ... просто в ситуации (1), абсолютно ли так, что вещь будет выпущена, когда BigView исчезнет?Я бы, конечно, предположил, что это так, но кто знает?
Вопрос в том, что произойдет, если вы действительно используете IBOutlet iVar, но НЕ свойство ...
Я глупо никогдадумал об этом раньше / предполагал слишком много, есть ли у кого-нибудь решающий ответ?Приветствия !!
Для записи я сделал тестовый проект.
На самом деле (удивительно для меня) просто акт соединения элемента IB с IBOutlet вФакт, видимо, добавляет одно удержание .
(Я могу только предположить из некачественного документа, что в этой ситуации вы получаете конкретно: удержание, автоматическое освобождение, удержание - ведение к одному удержанию на балансе.)1091 * Я опубликую демо-проект.Я также направляю всех читателей на ответ Джоны ниже, который безошибочно объясняет поведение setValue: forKey: Cheers