Di Objective-C Anda memiliki perbedaan antara sifat atom dan nonatomik:
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
Dari pemahaman saya, Anda dapat membaca dan menulis properti yang didefinisikan sebagai atom dari banyak utas dengan aman, sementara menulis dan mengakses properti nonatomik atau ivars dari beberapa utas pada saat yang sama dapat mengakibatkan perilaku yang tidak ditentukan, termasuk kesalahan akses yang buruk.
Jadi jika Anda memiliki variabel seperti ini di Swift:
var object: NSObject
Dapatkah saya membaca dan menulis ke variabel ini secara paralel dengan aman? (Tanpa mempertimbangkan arti sebenarnya dari melakukan ini).
atomic
umumnya tidak dianggap cukup untuk interaksi aman thread dengan properti, kecuali untuk tipe data sederhana. Untuk objek, seseorang biasanya menyinkronkan akses lintas utas menggunakan kunci (mis., NSLock
Atau @synchronized
) atau antrean GCD (mis., Antrean serial atau antrean serentak dengan pola "pembaca-penulis").
atomic
tidak memastikan keamanan thread untuk objek; dan (b) jika seseorang menggunakan salah satu teknik sinkronisasi yang disebutkan di atas dengan benar untuk memastikan keamanan thread (antara lain, mencegah baca / tulis secara bersamaan), masalah atomik diperdebatkan. Tetapi kita masih membutuhkan / menginginkannya untuk tipe data sederhana, yang atomic
memiliki nilai nyata. Pertanyaan bagus!
@atomic
atau@nonatomic
. atau hanya atom secara default. (Swift sangat tidak lengkap, kami tidak tahu banyak sekarang)