En Objective-C, vous avez une distinction entre les propriétés atomiques et non atomiques:
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
D'après ce que je comprends, vous pouvez lire et écrire des propriétés définies comme atomiques à partir de plusieurs threads en toute sécurité, tandis que l'écriture et l'accès à des propriétés non atomiques ou à des ivars à partir de plusieurs threads en même temps peuvent entraîner un comportement non défini, y compris des erreurs d'accès.
Donc, si vous avez une variable comme celle-ci dans Swift:
var object: NSObject
Puis-je lire et écrire dans cette variable en parallèle en toute sécurité? (Sans considérer la signification réelle de cela).
atomic
n'est généralement pas considéré comme suffisant pour une interaction thread-safe avec une propriété, sauf pour les types de données simples. Pour les objets, on synchronise généralement l'accès à travers les threads en utilisant des verrous (par exemple, NSLock
ou @synchronized
) ou des files d'attente GCD (par exemple, une file d'attente série ou une file d'attente simultanée avec un modèle "lecteur-écrivain").
atomic
n'assure pas la sécurité des threads pour les objets; et (b) si l'on utilise correctement l'une des techniques de synchronisation susmentionnées pour assurer la sécurité des threads (entre autres, empêcher les lectures / écritures simultanées), le problème atomique est sans objet. Mais nous en avons toujours besoin / le voulons pour les types de données simples, où atomic
a une valeur réelle. Bonne question!
@atomic
ou@nonatomic
. ou juste atomique par défaut. (Swift est tellement incomplet, nous ne pouvons pas en dire beaucoup maintenant)