Определение членов и свойств в Xcode 4 и iOS 4 - PullRequest
4 голосов
/ 13 мая 2011

Я довольно далеко продвинулась в разработке достаточно амбициозного первого проекта для iPhone, и меня смущает вопрос о том, каким образом реализовать и получить доступ к свойствам и почему.

Пример 1: (в .h)

Nsstring *_sale;
@property (nonatomic, retain) NSString *sale;

(в .m)

@synthesize sale = _sale;

Пример 2: (в .h)

@property (nonatomic, retain) NSString *sale;

(в .m)

@synthesize sale;

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

Может кто-то сказать мне разницу?

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Пример 1 демонстрирует старый способ определения пар переменных ivar / property.Новый компилятор теперь генерирует ivars (часть NSstring *_sale;) для вас.В примере 1 также показано, как вручную связать свойство sale с ivar _sale с помощью оператора @synthesize sale = _sale;.

Пример 2 - более краткий способ реализации свойств в Obj-C и способ, которым выувидите большинство примеров кода в ИнтернетеВ подавляющем большинстве случаев вы можете писать свои свойства без необходимости перезаписывать методы доступа / мутатора, сгенерированные для вас компилятором.

Существуют некоторые твердолобые сторонники префикса подчеркивания, чтобы обозначить переменные экземпляра для ясности.ради.Вы можете обнаружить, что это помогает вам, когда дело доходит до управления памятью, как в Примере 1, установка self.sale, равная автоматически освобожденной NSString, подойдет, поскольку она будет сохранена, но установка _sale, равная автоматически выпущенному объекту, приведет кпозднее, из-за нестабильного поведения, поскольку переданная NSString не будет сохранена переменной экземпляра.

В общем, я предпочитаю записывать свои свойства, как показано в примере 2.

ShortОтвет : Есть два способа сделать это, потому что новый компилятор теперь может сделать что-то для вас, но предыдущий способ был оставлен для обратной совместимости.

2 голосов
/ 13 мая 2011

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

Дальнейшее обсуждение в этом вопросе SO: Как работает подчеркивание перед переменной в классе target-c какао?

Для получения дополнительных рекомендаций по стилю какао CocoaDevCentral .

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