Почему свойства всегда считаются неатомарными в Objective C?
24765 просмотра
3 ответа
Говорят, что эта nonatomic
опция заставит ваш метод установки работать быстрее. Я гуглил это, но не в состоянии понять. Может кто-нибудь сказать мне, почему?
Ответы (3)
53 плюса
Объявление свойства atomic
заставляет компилятор генерировать дополнительный код, который предотвращает одновременный доступ к свойству. Этот дополнительный код блокирует семафор, затем получает или устанавливает свойство, а затем разблокирует семафор. По сравнению с установкой или получением примитивного значения или указателя блокировка и разблокировка семафора обходятся дорого (хотя обычно они пренебрежимо малы, если учесть общий поток вашего приложения).
Поскольку большинство ваших классов под iOS, особенно те, которые связаны с пользовательским интерфейсом, будут использоваться в однопоточной среде, безопасное отбрасывание atomic
(т. Е. Запись nonatomic
, потому что свойства atomic
по умолчанию): даже если операция относительно недорогая, вы не хочу платить за вещи, которые вам не нужны.
7 плюса
увидеть разницу между атомным и неатомным в объективе с
атомное
Atomic - поведение по умолчанию для свойства; если явно не указывать вышеуказанное свойство как неатомарное, оно будет атомарным.
Атомарное свойство добавляет уровень безопасности потока при получении или установке значений. То есть метод получения и установки свойства всегда будет полностью завершен независимо от того, что делают другие потоки. Компромисс в том, что доступ к этим свойствам будет немного медленнее, чем к неатомному эквиваленту.
Неатомарный
Неатомарные свойства не являются потокобезопасными и возвращают свои свойства напрямую. Это будет быстрее, чем атомные свойства, но, очевидно, несет некоторый риск, если не будут приняты меры предосторожности.
Автор: DharaParekh Размещён: 10.07.2013 01:093 плюса
@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Вопросы из категории :
- ios Приложение для iPhone в ландшафтном режиме, системы 2008
- ios Как мне дать моим веб-сайтам значок для iPhone?
- ios Как программно отправить смс на айфон?
- ios Как я могу разработать для iPhone, используя машину для разработки Windows?
- ios Tips for a successful AppStore submission?
- ios Как мне определить размер UITextView для его содержимого?
- ios iPhone viewWillAppear не стреляет
- ios Как показать индикатор загрузки в верхней строке состояния
- ios Как сохранить картинку в фотобиблиотеку iPhone?
- ios Как отключить выбор UITableView?
- objective-c Открытие нестандартного URL в приложении Какао
- objective-c Каков наилучший способ перетащить NSMutableArray?
- objective-c Как работает пул автозапуска NSAutoreleasePool?
- objective-c Как вы можете создать Makefile из проекта Xcode?
- objective-c Скругленные углы на UIImage
- objective-c Как мне создать временный файл с Какао?
- objective-c Как распечатать трассировку стека на консоль / журнал в Cocoa?
- objective-c @class vs. #import