Apa arti "nonatomik" dalam kode ini?
@property(nonatomic, retain) UITextField *theUsersName;
Apa perbedaan antara atom dan nonatomik?
Terima kasih
ios
objective-c
iphone
cocoa
properties
swiftBoy
sumber
sumber
Jawaban:
Lihatlah Apple Documents .
Pada dasarnya, jika Anda mengatakan
nonatomic
, dan Anda menghasilkan pengakses menggunakan@synthesize
, maka jika beberapa utas mencoba mengubah / membaca properti sekaligus, kejahatan dapat terjadi. Anda bisa mendapatkan nilai yang ditulis sebagian atau objek yang dirilis berlebihan / dipertahankan, yang dapat dengan mudah menyebabkan crash. (Namun ini berpotensi jauh lebih cepat daripada pengakses atom.)Jika Anda menggunakan default (yaitu
atomic
; dulu tidak ada kata kunci untuk ini, tetapi sekarang ada ), maka@synthesize
metode d menggunakan kunci tingkat objek untuk memastikan bahwa banyak pembacaan / penulisan ke properti tunggal diserialisasi. Seperti yang ditunjukkan oleh dokumen Apple, ini tidak berarti seluruh objek aman-utas , tetapi properti individu baca / tulis adalah.Tentu saja, jika Anda menerapkan accessors Anda sendiri daripada menggunakan
@synthesize
, saya pikir deklarasi ini tidak melakukan apa-apa selain menyatakan niat Anda apakah properti diimplementasikan dengan cara yang aman.sumber
atomic
menghindari crash saat mengakses properti individual tetapi tidak memastikan objek secara keseluruhan (mis. Mengakses properti terpisah seperti nama depan dan belakang) akan dilakukan hal yang benar.Setelah membaca begitu banyak Artikel dan posting StackOverflow, dan telah membuat aplikasi demo untuk memeriksa atribut atribut Variable, saya memutuskan untuk menggabungkan semua informasi atribut
jadi di bawah ini adalah tautan artikel terperinci di mana Anda dapat menemukan semua atribut yang disebutkan di atas, yang pasti akan membantu Anda. Terima kasih banyak kepada semua orang yang memberikan jawaban terbaik di sini !!
Contoh:
Contoh:
sumber
Selain apa yang telah dikatakan tentang threadsafeness, properti non-atom lebih cepat daripada pengakses atom. Ini bukan sesuatu yang biasanya perlu Anda khawatirkan, tetapi ingatlah itu. Properti Core Data yang dihasilkan sebagian nonatomik karena alasan ini.
sumber
Dalam program multi-ulir, operasi atom tidak dapat diinterupsi sebagian, sedangkan operasi non-atomik dapat.
Oleh karena itu, Anda harus menggunakan mutex (atau sesuatu seperti itu) jika Anda memiliki operasi kritis yang nonatomik yang Anda tidak ingin terputus.
sumber
Jika Anda menentukan "atomik", fungsi akses yang dihasilkan memiliki beberapa kode tambahan untuk menjaga terhadap pembaruan simultan.
sumber
Biasanya atom berarti menulis / membaca ke properti terjadi sebagai operasi tunggal. Operasi Atomic
sumber
Anda dapat menangani barang-barang ini dengan membaca artikel di bawah ini.
Threading Dijelaskan dengan tujuan nonatomik
nonatomik - Tidak Utas Aman
atomic - Thread Safe - Ini adalah atribut properti default.
sumber
The "atom” berarti bahwa akses ke properti adalah benang-aman. Sedangkan 'nonatomic' adalah kebalikan dari itu. Ketika Anda mendeklarasikan sebuah properti di Objective-C properti adalah atom secara default sehingga accesor disintesis menyediakan akses kuat ke properti dalam lingkungan multithreaded — yaitu, nilai yang dikembalikan dari pengambil atau set melalui setter selalu sepenuhnya diambil atau disetel terlepas dari apa yang dijalankan thread lain secara bersamaan.Tetapi jika Anda mendeklarasikan properti sebagai nonatomik seperti di bawah ini
maka itu berarti accessor yang disintesis untuk properti objek hanya mengembalikan nilai secara langsung. Efek dari atribut nonatomik tergantung pada lingkungan. Secara default, aksesor yang disintesis adalah atom. Jadi nonatomik jauh lebih cepat daripada atom.
sumber
Satu untuk multi thread. Satu bukan
sumber