Цель C: объявление свойства и объявление переменной экземпляра - PullRequest
4 голосов
/ 20 февраля 2012

Хотя вопрос является базовым, но я нашел, что очень важно понять, чтобы приступить к программированию IOS. Иногда мы объявляли только переменную экземпляра и не присваивали ей никакого связанного свойства. Некоторые, где мы просто объявляем свойства и используем синтез, чтобы получить или установить значения. Иногда я чувствую необходимость объявить оба кода, когда компиляция дает мне предупреждения! Что лежит в основе манипулирования свойствами в Objective C. Я знаю основное требование для создания getter и setter для любой переменной экземпляра, но когда? Я видел это много раз, когда мы вообще не используем свойство, и после этого мы легко устанавливаем и получаем значение переменной. Кроме того, различные типы свойств, такие как атомарная, неатомарная, сильная, сохраняемая, мне очень неясны. Обновление XCODE до 4.2 потрясло мои представления об управлении памятью. Может кто-нибудь очистить мой разум от облака?

Ответы [ 2 ]

9 голосов
/ 20 февраля 2012

Свойства всегда предпочтительнее прямого доступа к ivar, в основном по следующим причинам:

  • Вы можете переопределить геттер или сеттер в подклассе
  • Вы можете определить «назначение»поведение "(а именно copy, assign, retain/strong, weak)
  • Вы можете синхронизировать доступ к ivar

Ключевые слова:

  • copy: объект копируется в ивар при установке
  • assign: указатель объекта назначается ивару при установке
  • retain/strong: объект сохраняется в наборе
  • weak: В ARC это похоже на assign, но будет автоматически установлено на nil, когда экземпляр освобожден, также используется в среде сборки мусора.
  • nonatomic:Метод доступа не является @synchronized (потокобезопасным), и, следовательно, быстрее
  • atomic: метод доступа является @synchronized (потокобезопасным), и, следовательно, медленнее

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

2 голосов
/ 20 февраля 2012

Во время набора текста я увидел, что «Эрик Эйгнер» быстрее с хорошим ответом.

Для примера по свойствам, синтезу и настройке см. Мой ответ по стеку: Соглашение Objective C для предотвращения "локального объявления скрывает переменную экземпляра" предупреждение

Учебное пособие по ARC приведено в описании Рэя Вендерлича на его сайте:

Начало ARC в iOS 5 часть 1 и

Начало ARC в iOS 5 часть 2

...