Saya mencoba menyelesaikan teka-teki.
__strong
adalah default untuk semua penunjuk objek yang dapat dipertahankan Objective-C seperti NSObject, NSString, dll. Ini adalah referensi yang kuat. ARC menyeimbangkannya dengan a -release
di akhir ruang lingkup.
__unsafe_unretained
sama dengan cara lama. Ini digunakan untuk penunjuk yang lemah tanpa mempertahankan objek yang dapat dipertahankan.
__weak
seperti __unsafe_unretained
kecuali bahwa itu adalah referensi lemah auto-zeroing yang berarti bahwa penunjuk akan disetel ke nol segera setelah objek yang direferensikan dibatalkan alokasinya. Ini menghilangkan bahaya petunjuk yang menggantung dan kesalahan EXC_BAD_ACCESS.
Tapi sebenarnya __autoreleasing
bagus untuk apa? Saya kesulitan menemukan contoh praktis tentang kapan saya perlu menggunakan kualifikasi ini. Saya percaya itu hanya untuk fungsi dan metode yang mengharapkan pointer-pointer seperti:
- (BOOL)save:(NSError**);
atau
NSError *error = nil;
[database save:&error];
yang di bawah ARC harus dinyatakan seperti ini:
- (BOOL)save:(NSError* __autoreleasing *);
Tapi ini terlalu kabur dan saya ingin memahami alasannya . Potongan kode yang saya temukan menempatkan __autoreleasing di antara dua bintang, yang terlihat aneh bagi saya. NSError**
Jenisnya adalah (pointer-pointer ke NSError), jadi mengapa menempatkan di __autoreleasing
antara bintang-bintang dan tidak hanya di depan NSError**
?
Juga, mungkin ada situasi lain yang harus saya andalkan __autoreleasing
.