В чем разница между свойством readwrite и неатомным свойством присваивания?
Я видел readwrite на int, BOOL и так далее, как неатомический, присваивать.
Я немного смущен этим. Я знаю, что на не-родных объектах мы обычно делаем неатомические, сохраняем.
Ответы
Ответ 1
Вот короткий ответ:
atomic
vs nonatomic
в первую очередь гарантирует, что полные значения возвращаются из синтезированных геттеров и что полные значения записываются синтезированными сеттерами (по умолчанию атомный).
readwrite
vs readonly
определяет, имеет ли синтезированное свойство синтезированный аксессуар или нет (readwrite имеет setter и является значением по умолчанию, readonly does not).
assign
vs retain
vs copy
определяет, как синтезированные аксессоры взаимодействуют с схемой управления памятью Objective-C:
-
assign
по умолчанию и просто выполняет назначение переменной
-
retain
указывает, что новое значение должно быть отправлено - получить при назначении и отправленное старое значение -release
-
copy
указывает, что новое значение должно быть отправлено -copy при назначении и отправлено старое значение -release
.
Ответ 2
readwrite
означает, что существуют как геттер, так и сеттер; напротив, readonly
. Обычно единственный раз, когда вы явно объявляете свойство readwrite
, находится в расширении класса для класса, в котором публичный интерфейс объявляет свойство readonly
- так, чтобы он публично доступен только для чтения, но внутри вы можете как получать, так и устанавливать.
Ответ 3
После прочтения столь многих статей, сообщений SO и демонстрационных приложений, чтобы проверить атрибуты свойств Variable, я решил объединить все данные атрибутов
- atomic//default
- неатомической
- strong = сохранить//по умолчанию
- weak = unsafe_unretained
- сохранить
- присваивать //default
- unsafe_unretained
- Копия
- только для чтения
- readwrite//default
поэтому ниже приведена подробная ссылка на статью, в которой вы можете найти выше упомянутые все атрибуты, которые вызывающе помогут вам.
Большое спасибо всем людям, которые дают лучшие ответы здесь!
Измененные атрибуты свойств или модификаторы в iOS
- сохранить = сильный
- он сохраняется, старое значение освобождается и назначается
- Сохранить указывает, что новое значение должно быть отправлено - получить при назначении и отправленное старое значение -release
- сохранить то же самое, что и сильный.
- apple говорит, что если вы напишете, сохраните, он будет автоматически преобразован/работает как сильный.
- методы, такие как "alloc", включают неявное "сохранение"
Пример:
@property (nonatomic, retain) NSString *name;
@synthesize name;
- правопреемником
- назначает значение по умолчанию и просто выполняет присвоение переменной
- assign - это атрибут свойства, который сообщает компилятору, как синтезировать реализацию средства установки свойств.
- Я бы использовал назначение для примитивных свойств C и слабый для слабых ссылок на объекты Objective-C.
Пример:
@property (nonatomic, assign) NSString *address;
@synthesize address;
-
только для чтения
- Объявление вашего свойства, поскольку вы только что указываете компилятору, что он автоматически не генерирует метод установки.
- Указывает, что свойство доступно только для чтения.
- Если вы укажете только для чтения, в блоке @implementation требуется только метод getter. Если вы используете директиву @synthesize в
блок @implementation, синтезируется только метод getter. Более того, если вы попытаетесь присвоить значение с помощью синтаксиса точек,
вы получаете ошибку компилятора.
Пример:
@property (nonatomic, readonly) NSString *name;
@synthesize name;
- чтение и запись
- сгенерированы сеттеры и получатели.
- Указывает, что свойство должно рассматриваться как чтение/запись.
- Этот атрибут по умолчанию.
- В блоке @implementation требуются как метод getter, так и setter. Если вы используете директиву @synthesize в реализации
блок, методы геттера и сеттера синтезируются.
Пример:
@property (nonatomic, readwrite) NSString *name;
@synthesize name;