IBOutlet о свойствах и экспозиции класса - PullRequest
0 голосов
/ 10 июня 2010

Apple, для вопросов управления памятью, рекомендуем определять выходы по свойствам, а не в объявлении атрибута.Но, насколько мне известно, объявление свойств предоставляет класс внешним классам, поэтому это может быть опасно.

В UIViewController у нас есть определение основного представления и логика, поэтому MVC слегка обманут в этом случае.

Какой подход лучше, рекомендация Apple по управлению памятью или бронированные классы?

Ответы [ 2 ]

0 голосов
/ 10 июня 2010

Полагаю, вы думаете об этом неправильно.

Розетки существуют только для того, чтобы внешний объект, код Interface Builder и декодеры пера, мог настроить экземпляр класса с розетками.Сокрытие выхода за @protected или @private лишит их цели.

В хорошем дизайне это не должно быть проблемой, поскольку контроллеры представления должны быть относительно легкими объектами, единственной функцией которых является перемещение данных между представлением и моделью.Основная логика приложения должна быть безопасно заключена в модель.

Если вам нужен защищенный дизайн, вы можете создавать представления программно и делать их частными, но вы теряете всю гибкость и повторное использование, которое вы получаете с розетками.Это компромисс.

Однако в любом случае это не имеет ничего общего с управлением памятью и ее свойствами.Является ли свойство общедоступным, защищенным или частным, не имеет никакого отношения к управлению памятью свойств.

0 голосов
/ 10 июня 2010

MVC не обманывается UIViewController, так как этот класс реализует контроллер.Он определяет связи между объектами View (обычно хранящимися в XIB) и объектами Model (иногда объектами Core Data, иногда другими вещами).

В любом случае.Смысл определения торговых точек как свойств заключается в том, что вы можете явно указать, какие требования к управлению памятью для свойств есть в интерфейсе класса.Механизм загрузки NIB использует средства доступа, если они существуют, поэтому, если вы определите свойство сохранения, розетка будет сохранена.Если он не может найти методы доступа, он установит переменную экземпляра напрямую.

Независимо от того, определяете ли вы свойства или нет для ваших торговых точек, это действительно вопрос личного вкуса.Я делаю, потому что выходы устанавливаются внешним объектом (класс NSBundle), поэтому, на мой взгляд, представляют собой часть контракта API моего контроллера представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...