@property для типа int?

Просто быстрый вопрос, если я могу, я всегда (после обучения obj-c) записывал свойства int следующим образом...

@property(nonatomic, assign) int myValue;

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

@property int myValue;

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

все лучшее

Гэри

Ответы

Ответ 1

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

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

Ответ 2

@property(nonatomic, assign) int myValue;

не совпадает с

@property int myValue;

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

Ответ 3

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

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