Apa arti "nonatomik" dalam kode ini?
@property(nonatomic, retain) UITextField *theUsersName;
Apa perbedaan antara atom dan nonatomik?
Terima kasih
Apa arti "nonatomik" dalam kode ini?
@property(nonatomic, retain) UITextField *theUsersName;
Apa perbedaan antara atom dan nonatomik?
Terima kasih
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.
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:
@property (retain) NSString *name;
@synthesize name;
Contoh:
@property (nonatomic, retain) NSString *name;
@synthesize name;
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.
Jika Anda menentukan "atomik", fungsi akses yang dihasilkan memiliki beberapa kode tambahan untuk menjaga terhadap pembaruan simultan.
Biasanya atom berarti menulis / membaca ke properti terjadi sebagai operasi tunggal. Operasi Atomic
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.
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
@property (nonatomic, retain) NSString *myString;
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.
Satu untuk multi thread. Satu bukan