Я заметил, что многие интерфейсы Apple используют @private
перед объявлениями переменных экземпляра. Есть ли для этого веская конструктивная причина, и нужно ли это делать?
Пометка переменных экземпляра @private
Ответы (3)
Частные переменные экземпляра используются для отделения интерфейса от реализации. В Objective-C, поскольку объявление класса должно отображать все переменные экземпляра, должен быть способ предотвратить доступ подклассов к тем, которые являются частью внутренней реализации. В противном случае другие программисты могли бы написать код, зависящий от этих внутренних переменных, что сделало бы невозможным для разработчика класса внесение изменений во внутренние элементы класса без нарушения существующего кода.
С другой стороны, переменные экземпляра, которые не помечены как закрытые, являются частью контракта с программистом подкласса, тогда как те, которые помечены как частные, таковыми не являются.
Это означает, что переменные экземпляра обычно должны быть помечены как закрытые, чтобы к ним можно было получить доступ только через их методы доступа, если вообще. В противном случае кто-то может легко написать подкласс вашего класса и просто создать метод доступа, чтобы сделать любую переменную экземпляра общедоступной.
@private
не защищает от категорий, публикующих их. Мысли?
- person Jonathan Sterling; 19.12.2009
Если вы не хотите, чтобы подклассы имели доступ к переменным, пометьте их @private.
Другой способ сделать это — объявить переменные экземпляра в разделе @implementation. Такие переменные неявно закрыты. Источник: Кочан: Programming in Objective-C, Fourth Edition. п. 199. Таким образом, неверно, что объявление класса должно отображать все переменные экземпляра, как утверждает e.James.
Единственная причина для объявления переменных экземпляра в @interface — разрешить их наследование производным классом (подклассом).
()
, но имеет другую семантику и возможности.
- person ikuramedia; 17.02.2012