Маркировка переменных экземпляра @private - PullRequest
2 голосов
/ 19 декабря 2009

Я заметил, что многие интерфейсы Apple используют @private до объявления их переменных экземпляра. Есть ли для этого веская причина, и я должен это сделать?

Ответы [ 3 ]

4 голосов
/ 19 декабря 2009

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

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

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

1 голос
/ 19 декабря 2009

Если вы не хотите, чтобы подклассы могли обращаться к переменным, отметьте их @ private.

0 голосов
/ 16 января 2012

Другой способ сделать это - объявить переменные экземпляра в разделе @implementation. Такие переменные неявно являются частными. Источник: Кочан: Программирование в Objective-C, четвертое издание . п. 199. Таким образом, неверно, что объявление класса должно показывать все переменные экземпляра, как заявлено e.James.

Единственная причина объявления переменных экземпляра в @interface - позволить им наследоваться производным классом (подкласс).

...