Подтвердить что ты не робот

Почему переменные экземпляра считаются плохой практикой Apple?

В Apple Programming с Objective-C в разделе Encapsulating Data указано, что:

Вы можете определить переменные экземпляра без свойств

Лучше всего использовать свойство на объекте в любое время, когда вам нужно отслеживать значение или другой объект.

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

Мне интересно, почему это может быть так? Я понимаю, что у свойств есть такие функции, как KVO и атрибуты (сильный, слабый...), но во многих случаях мне не нужны эти функции, и переменная экземпляра будет работать нормально.

Есть ли веские причины, почему переменные экземпляра не могут считаться лучшей практикой?

4b9b3361

Ответ 1

Несмотря на то, что теперь ваша частная переменная может работать как простая переменная, вы можете позже решить, что некоторые полезные свойства полезны:

  • наблюдения
  • атомные аксессоры
  • пользовательские аксессоры
  • регистрация при доступе
  • доступ из подклассов

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

В принципе, свойства полезны, даже если вы никогда не планируете публиковать их.

Конечно, есть места, где использование переменной экземпляра по-прежнему "более естественно", например, если вы переопределяете классы Foundation в кластере классов (например, NSArray), он ожидает, что ваша реализация является частной и эффективной, поэтому я не использую свойства.

Кроме того, я не думаю, что вы должны слишком много читать в советах. Для меня это больше похоже на "Если вы только что узнали 5 минут назад о свойствах и переменных экземпляра, начните сначала с использования свойств".

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

Ответ 2

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

Где вы читали, что они рекомендуют свойства private? Я думаю, что они означают публичные переменные/свойства.

И, конечно, использование свойств вместо переменных публичного экземпляра имеет множество преимуществ:

  • инкапсуляция и пользовательские геттеры/сеттеры
  • Управление памятью
  • KVO
  • двоичная совместимость
  • и т.д.

Но, на мой взгляд, использование свойств private вообще не имеет преимуществ, и гораздо проще использовать частные переменные экземпляра. Единственная причина, по которой я могу себе представить, - это сделать пользовательские геттеры/сеттеры для таких переменных в будущем, но я не думаю, что это "лучшая практика".

Ответ 3

Точка лежит в основе абстракции хранилища. Такой простой, но очень мощный.