Если вы перетащите новую розетку из интерфейса Builder в файл интерфейса (заголовка), Xcode 4.6 автоматически создаст для вас свойство...
В iOS (Cocoa Touch) он будет выглядеть следующим образом:
@property (weak, nonatomic) SomeClass *someProperty; //nonatomic accessors
В то время как на OS X (Cocoa) это будет выглядеть так:
@property (weak) SomeClass *someProperty; //atomic accessors (implicitly)
Почему?
EDIT: я не спрашиваю, что атом делает или не делает, я хорошо знаю директиву синхронизации и базовый мьютекс (или блокировку или что-то еще), что гарантирует атомарность сеттер и геттер. Я знаю, что на iOS аксессоры неатомичны, потому что UIKit не является потокобезопасным, и поэтому нет ничего, что можно было бы сделать, сделав их атомарными, это просто потеря времени процессора и времени автономной работы. Я говорю о случае по умолчанию здесь, программисты, которые знают, что они делают, будут знать, когда им нужно сделать их аксессуры атомарными.
Итак, я спрашиваю, почему они по умолчанию являются атомами по OS X. У меня создалось впечатление, что Appkit также не был потокобезопасным. И наличие атомных аксессуаров не гарантирует безопасность потоков, я даже зашел так далеко, чтобы сказать, что это идет наоборот, потому что это может дать иллюзию безопасности потоков начинающим программистам и затруднить отслеживание ошибок в параллельных приложениях, откладывая сбои к более позднему времени и тем самым сделать их труднее проследить. И только потому, что настольные компьютеры относительно мощные, не означает, что ресурсы должны быть потрачены впустую (обратите внимание, что я не говорю о преждевременной оптимизации здесь), и, поскольку разумно, что инженеры Apple являются разумными программистами, должна быть веская причина, по которой они решил, что по умолчанию свойства синтезируют атомарные аксессоры.