Нет иваров -> Чего мне не хватает? - PullRequest
8 голосов
/ 14 сентября 2011

Я никогда не использую ивары.Я использую только свойства - иногда присваиваю свойства примитивным типам, а иногда «частному» расширению класса .Я видел преимущества неиспользования ivars при переходе на ARC - у меня есть заимствованный код с большим количеством ivars, который я до сих пор не могу «ARC», так как я не знаю, что нужно сохранить.Итак, я знаю некоторые преимущества , а не при использовании ivars, но каковы преимущества использования ivars вместо свойств?

Примечание: я зависим исключительно от иваров, которые автоматически добавляются (компилятор?) для объявления свойства.

Не отмечать, чтобы закрыть: Я смотрел на некоторые другие вопросы, такие как this и это и никто не попал в точку. Названия выглядят хорошо, , но, как и многие вопросы по SO, вопросы - это беспорядок странных сомнений и прочего.

Ответы [ 3 ]

4 голосов
/ 15 сентября 2011

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

РЕДАКТИРОВАТЬ

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

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

3 голосов
/ 14 сентября 2011

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

1 голос
/ 15 сентября 2011

Одна веская причина для меня: досадная ошибка GCC, см. этот другой вопрос для описания.

Если вы используете Clang / LVVM, вам не нужно беспокоиться об этой ошибке.

...