Соглашение об именовании переменных экземпляра при синтезе свойств - PullRequest
4 голосов
/ 27 ноября 2011

При синтезе свойств в Objective-C рекомендуется не просто писать:

@synthesize window; 

а точнее

@synthesize window = _window;

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

Я всегда использовал @synthesize var1, var2, etc в своих приложениях без "плохих вещей". Какие плохие вещи могут случиться?

Ответы [ 2 ]

5 голосов
/ 27 ноября 2011

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

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

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

0 голосов
/ 09 сентября 2014

Основная причина использования начального подчеркивания в переменных экземпляра (например, _myProperty) заключается в том, что когда люди читают код с начальным подчеркиванием, они знают, что вы используете переменную экземпляра, а не локальную переменную, глобальную переменную или забыл написать "я". как self.myProperty, и что вы сделали это намеренно.

До ARC _myProperty не выполнял подсчет ссылок, а self.myProperty (для свойств "retain" / "strong"). С ARC, когда вы используете свойства «copy», _myProperty выполняет подсчет ссылок, но копирование по-прежнему не выполняется, поэтому есть некоторые различия. Самое важное отличие заключается в том, что _myProperty не вызовет никаких наблюдателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...