синтаксис @property objective-c

Ищу синтаксис геттера / сеттера. Какой сеттер, а какой получатель?

Является ли атрибут readwrite получателем?
Назначает ли он установщик?

@interface SomeClass : NSObject
{
  NSString *str;
  NSDate *date;
} 

@property (readwrite, assign) NSString *str;
@property (readwrite, assign) NSDate *date;

person okami    schedule 24.05.2010    source источник


Ответы (4)


Ни геттер, ни сеттер. readwrite контролирует, создается ли метод set или только геттер, а assign определяет схему управления памятью (в этом случае переменные не сохраняются, что, вероятно, является ошибкой).

Полный синтаксис объявления свойств можно найти в соответствующие документы.

person Chuck    schedule 24.05.2010
comment
Эта документация очень хороша, хотя я не нашел, могу ли я поменять местами такие атрибуты, как: @property (копировать, читать, писать) NSString * value; @property (чтение, запись, копирование) NSString * значение; - person okami; 24.05.2010
comment
@okami: вы можете поменять местами порядок, но есть порядок, в котором они обычно записываются, и отклонение от него может быть менее полезным для других людей, сканирующих ваш код. - person corprew; 24.05.2010

Вам следует посетить эту страницу , это объяснит вещи.

readwrite = свойство можно читать и писать

assign = это свойство, которое не нужно подсчитывать. (альтернативой является 'сохранить', что означает, что значения этого свойства retained при установке и released при перезаписи.

person corprew    schedule 24.05.2010
comment
ссылка не работает, и страница, к сожалению, не является очень хорошим якорем. - person Dan Rosenstark; 05.08.2015

Ни один. Опубликованный вами код является объявлением интерфейса; геттеры и сеттеры входят в контекст @implementation и обычно создаются с помощью директивы @synthesize, как в

 @synthesize str;
 @synthesize date;

После объявления свойства может идти ряд атрибутов. В этом случае readwrite указывает, что значение свойства может быть установлено (с использованием синтаксиса someObject.str = @"foo"); напротив - readonly, что означает, что значение свойства не может быть установлено. assign - в отличие от copy или retain - означает, что значение свойства устанавливается напрямую, тогда как последние два создают копию значения и сохраняют значение, соответственно.

person Noah Witherspoon    schedule 24.05.2010

Получатель и сеттер - это два метода, которые автоматически создаются при использовании @property. По умолчанию у геттера будет то же имя, что и у свойства, у сеттера будет имя с префиксом set и суффиксом :; например, для свойства str вы можете вызвать [someobj str], чтобы получить свойство str, и [someobj setStr: somestr].

Атрибуты readwrite и assign предоставляют некоторую информацию о том, как следует определять эти средства получения и установки, если вы используете @synthesize для создания определений за вас. readwrite просто говорит, что вам разрешено устанавливать свойство, а assign говорит, как свойство будет установлено. Дополнительную информацию см. В документации. .

person Brian Campbell    schedule 24.05.2010