2010-10-19 2 views
16

Просто быстрый вопрос, если позволите, я всегда (так как обучение Obj-C), написанные свойства Int следующим образом ...@property для типа int?

@property(nonatomic, assign) int myValue; 

теперь я думал, что это может быть излишним, и я мог бы также написать ...

@property int myValue; 

Просто любопытно, я знаю, что «назначить» поведение по умолчанию, и что «неатомической» может быть дробным быстрее ...

все лучшее

Gary

ответ

8

Ну, вопрос об объявлении атомарность отдельный один из ли вы явно объявить атрибуты по умолчанию. Первые будут зависеть от характера вашего кода - может быть, есть спорный многопоточный доступ к свойству?

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

2

Nonatomic генерирует меньше кода и немного быстрее. Я согласен, что это очень много.

Если ваше приложение может использовать несколько потоков, вы будете рады, что поставить эти явные классификаторов, когда вы сталкиваетесь со странными ошибками ...

33
@property(nonatomic, assign) int myValue; 

не то же самое, как

@property int myValue; 

по умолчанию для свойства атомарно (нет явного ключевого слова atomic). Итак, второй пример - атомное свойство. Для свойства примитивного типа я не знаю, происходит ли какая-либо блокировка, но, вероятно, будет введен барьер записи памяти (т. Е. Сеттер заставит значение быть записано обратно в основную память, а не только в кеш). Таким образом, атомные свойства значительно медленнее, чем неатомические свойства. Однако, как часть общего времени выполнения программы, они все равно могут представлять собой очень небольшой процент. Вы не узнаете, пока не профилируете свой код.

Смежные вопросы