Я считаю, что документация по этой проблеме неясна:
Скажите, что вы работаете с 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 код nib-загрузки использует метод setValue: forKey: для повторного подключения к каждой розетке. Этот метод аналогичным образом ищет подходящий метод доступа и [SO WHAT HAPPENS, ЕСЛИ ЕСТЬ НЕ ОДИН?..] возвращается к другим средствам, когда это не удается... [GOOD GRIEF!]"
И ознакомьтесь с этой документацией: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html и прокрутите вниз до "Сохранение объекта Nib"
Итак...
"Объекты в файле nib создаются с сохранением числа 1, а затем автореализовываются" Фантастические..
Но подождите! Прочтите несколько слов...
однако..., который использует доступный метод setter или сохраняет объект по умолчанию, если не доступен метод setter
О чем они говорят?
Они означают, что если нет сеттера (ivar, но нет свойства), что он СНОВА RETAINED (кроме "сохранить", которые они просто упоминают в предыдущем пункте) --- или, они просто повторяются, т.е. "сохраняет объект по умолчанию" - это то же самое "удержание", о котором они говорили непосредственно ранее ( "созданный с сохранением числа 1, а затем автореализованным" ).
И почему они даже упоминают автореферат, если это не то, что происходит?
В самом деле - если кто-то действительно знает ответ на этот вопрос...... , как вы знаете?!? Вы спрашивали DTS или через тестирование или? Я предлагаю, ключевая документация (только что вставленная) агрессивно неясна.
Опять же - если у вас есть IBOutlet, , но не свойство, подключенное к объекту верхнего уровня. вы несете ответственность за его выпуск? Сохранено ли оно? в этой ситуации?
Если уж на то пошло... только в ситуации (1), это абсолютно так, что вещь будет выпущена, когда BigView уйдет? Я бы предположил, что это так, но кто знает?
Вопрос в том, что произойдет, если вы используете IBOutlet iVar, но НЕ свойство...
Я глупо никогда не думал об этом раньше/предполагал слишком много, кто-нибудь имеет решающий ответ? Ура!!
Для записи я сделал тестовый проект.
На самом деле (неожиданно для меня) простой акт подключения элемента IB к IBOutlet фактически добавляет один элемент сохранения.
(Я могу только предположить из дрянной документации, в той ситуации вы получите конкретно: сохранить, автообновление, сохранить - привести к тому, чтобы один оставался на балансе.)
Итак, это ответ.
Я отправлю демонстрационный проект. Я также направляю всех читателей на ответ Ионы ниже, который безупречно объясняет поведение setValue: forKey: Cheers