Почему свойства всегда считаются неатомарными в Objective C?

ios objective-c

24765 просмотра

3 ответа

Говорят, что эта nonatomicопция заставит ваш метод установки работать быстрее. Я гуглил это, но не в состоянии понять. Может кто-нибудь сказать мне, почему?

Источник Размещён: 12.11.2019 09:56

Ответы (3)


53 плюса

Решение

Объявление свойства atomicзаставляет компилятор генерировать дополнительный код, который предотвращает одновременный доступ к свойству. Этот дополнительный код блокирует семафор, затем получает или устанавливает свойство, а затем разблокирует семафор. По сравнению с установкой или получением примитивного значения или указателя блокировка и разблокировка семафора обходятся дорого (хотя обычно они пренебрежимо малы, если учесть общий поток вашего приложения).

Поскольку большинство ваших классов под iOS, особенно те, которые связаны с пользовательским интерфейсом, будут использоваться в однопоточной среде, безопасное отбрасывание atomic(т. Е. Запись nonatomic, потому что свойства atomicпо умолчанию): даже если операция относительно недорогая, вы не хочу платить за вещи, которые вам не нужны.

Автор: dasblinkenlight Размещён: 10.07.2013 01:08

7 плюса

увидеть разницу между атомным и неатомным в объективе с

атомное

Atomic - поведение по умолчанию для свойства; если явно не указывать вышеуказанное свойство как неатомарное, оно будет атомарным.

Атомарное свойство добавляет уровень безопасности потока при получении или установке значений. То есть метод получения и установки свойства всегда будет полностью завершен независимо от того, что делают другие потоки. Компромисс в том, что доступ к этим свойствам будет немного медленнее, чем к неатомному эквиваленту.

Неатомарный

Неатомарные свойства не являются потокобезопасными и возвращают свои свойства напрямую. Это будет быстрее, чем атомные свойства, но, очевидно, несет некоторый риск, если не будут приняты меры предосторожности.

Автор: DharaParekh Размещён: 10.07.2013 01:09

3 плюса

@property (strong) NSString *str;

Atomic - поведение по умолчанию для свойства; если явно не указывать вышеуказанное свойство как неатомарное, оно будет атомарным.

сеттер и геттер для этого атомного свойства

-(NSString *) str{
@synchronized(self){
return str;
}}

-(void) setStr: (NSString *) newString {
@synchronized(self)  {
str = newString;
}}

Атомарное свойство добавляет уровень безопасности потока при получении или установке значений. То есть метод получения и установки свойства всегда будет полностью завершен независимо от того, что делают другие потоки. доступ к этим свойствам будет немного медленнее, чем к неатомному эквиваленту.

@property (strong,nonatomic) NSString *str;

Неатомарные свойства не являются потокобезопасными и возвращают свои свойства напрямую. Это будет быстрее, чем атомные свойства, но, очевидно, несет некоторый риск, если не будут приняты меры предосторожности.

сеттер и геттер для этих неатомических свойств

-(NSString *) str{
    return str;
    }}

-(void) setStr: (NSString *) newString{
str = newString;
}

Итак, рассматривая методы сеттера и геттера как для атомарного , так и для неатомного , можно сказать, что неатомные методы очень легкие.

Автор: Suryakant Sharma Размещён: 10.07.2013 01:24
Вопросы из категории :
32x32