Почему свойства какао IBOutlet по умолчанию атомарны, а свойства Cocoa Touch нет?

Если вы перетащите новый выход из Interface Builder в файл интерфейса (заголовка), Xcode 4.6 автоматически создаст свойство для вас ...

На iOS (Cocoa Touch) это будет выглядеть так:

@property (weak, nonatomic) SomeClass *someProperty; //nonatomic accessors

В то время как на OS X (Какао) это будет выглядеть так:

@property (weak) SomeClass *someProperty; //atomic accessors (implicitly)

Почему?

РЕДАКТИРОВАТЬЯ не спрашиваю о том, что атомарный делает или не делает, я хорошо знаю директиву синхронизации и нижележащий мьютекс (или блокировку или что-то еще), который гарантирует атомарность установщика и получателя. Я знаю, что в iOS средства доступа неатомичны, потому что UIKit не является поточно-ориентированным, и поэтому ничего не получится, сделав их атомарными, это просто пустая трата процессорного времени и времени автономной работы. Я говорю о случае по умолчанию здесь, программисты, которые знают, что они делают, будут знать, когда им нужно сделать свои методы доступа атомарными.

Поэтому я спрашиваю, почему они являются атомарными по умолчанию в OS X. У меня сложилось впечатление, что Appkit также не безопасен для потоков. А наличие атомарных средств доступа не гарантирует безопасность потоков, я бы даже сказал, что все идет наоборот, поскольку он может дать иллюзию безопасности потоков начинающим программистам и усложнить отслеживание ошибок в параллельных приложениях, откладывая сбои. к более позднему времени и при этом сделать их труднее отследить. И только потому, что настольные компьютеры относительно мощные, не означает, что ресурсы следует тратить впустую (заметьте, я не говорю о преждевременной оптимизации здесь), и, разумеется, инженеры Apple - разумные программисты, должна быть веская причина, почему они решил сделать свойства синтезатора атомарными по умолчанию.

Ответы на вопрос(4)

Ваш ответ на вопрос