У Objective-C ви маєте різницю між атомними та неатомними властивостями:
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
З мого розуміння, ви можете безпечно читати і записувати властивості, визначені як атомні з декількох потоків, в той час як запис і доступ до неатомічних властивостей або ivars з декількох потоків одночасно можуть призвести до не визначеної поведінки, включаючи помилкові помилки доступу.
Отже, якщо у Swift у вас є така змінна:
var object: NSObject
Чи можу я паралельно безпечно читати та записувати до цієї змінної? (Не враховуючи власне значення цього робити).
atomic
зазвичай не вважається достатнім для безпечної потокової взаємодії з властивістю, за винятком простих типів даних. Для об'єктів один, як правило, синхронізує доступ через потоки, використовуючи блокування (наприклад, NSLock
або @synchronized
) або черги GCD (наприклад, послідовна черга або паралельна черга з шаблоном "читач-записувач").
atomic
не забезпечує безпеку ниток для об'єктів; і (b) якщо належним чином застосовується один із згаданих вище способів синхронізації для забезпечення безпеки потоку (крім усього іншого, запобігання одночасного читання / запису), атомна проблема є суперечливою. Але ми все ще потребуємо / хочемо це для простих типів даних, де atomic
має реальне значення. Гарне питання!
@atomic
або@nonatomic
. або просто атомний за замовчуванням. (Свіфт настільки незавершений, що ми не можемо сказати багато зараз)