Простые свойства в классах Objective-C - PullRequest
2 голосов
/ 26 декабря 2010

Мне уже давно нравится работать с Objective-C, и до сих пор мне никогда не приходилось создавать собственные классы, как следует.

Я немного запутался с двумя аргументами, которые вы можетедать объявление @property(a, b) в заголовочном файле.При создании выходов в Интерфейсном Разработчике я обычно делаю @property(nonatomic, retain), но я понятия не имею, что это значит.

Я пишу простой класс, который имеет набор свойств, которые будут установлены снаружи, например [instance setName:@"Bla Bla Bla"]; или я думаю, что instance.name = @"Bla@", но я бы предпочел первый вариант.

Как бы я объявил этот тип свойства в классе?

Спасибо заранее!Извините за n00bish вопрос: -)

1 Ответ

1 голос
/ 26 декабря 2010

Параметр @property дает подсказку о поведении свойства:

nonatomic говорит вам, что установка / получение значения свойства не является атомарным (по отношению к многопоточному доступу)

retain говорит вам, что объект будет сохранен в свойстве (т. Е. Получатель будет владеть объектом). Возможны следующие варианты: «копировать» (объект копируется с помощью -copy. Обычно это хороший выбор для объектов-значений, таких как NSStrings) и «назначать» (объект просто присваивается свойству без его сохранения. Обычно это хороший выбор для делегатов или источников данных). Эти 3 параметра полезны только для объектов ObjC, а не для простых свойств типа C.

Подробнее см. http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html.

В вашем случае вы, вероятно, будете использовать:

@property(copy) NSString* name;

Или:

@property(nonatomic, copy) NSString* name;

Если вам не нужно, чтобы установщик / получатель свойств был атомарным.

...