Saya mencoba mempelajari Penghitungan Referensi Otomatis di iOS 5. Sekarang bagian pertama dari pertanyaan ini seharusnya mudah:
Apakah benar bahwa saya TIDAK perlu menulis pernyataan properti rilis eksplisit di dealloc saya saat menggunakan ARC? Dengan kata lain, apakah benar bahwa berikut TIDAK memerlukan dealloc eksplisit?
@interface MyClass : NSObject @property (strong, nonatomic) NSObject* myProperty; @end @implementation MyClass @synthesize myProperty; @end
Pertanyaan saya berikutnya dan yang lebih penting datang dari sebuah baris di dokumen Transitioning to ARC Release Notes :
Anda tidak harus (memang tidak bisa) melepaskan variabel instan, tetapi Anda mungkin perlu memanggil [self setDelegate: nil] pada kelas sistem dan kode lain yang tidak dikompilasi menggunakan ARC.
Ini menimbulkan pertanyaan: bagaimana saya tahu kelas sistem mana yang tidak dikompilasi dengan ARC? Kapan saya harus membuat dealloc saya sendiri dan secara eksplisit menetapkan properti yang sangat mempertahankan ke nol? Haruskah saya menganggap semua kelas kerangka kerja NS dan UI yang digunakan dalam properti memerlukan deallocs eksplisit?
Ada banyak informasi tentang SO dan di tempat lain tentang praktik melepaskan ivar dukungan properti ketika menggunakan pelacakan referensi manual, tetapi relatif sedikit tentang hal ini ketika menggunakan ARC.
MyController : UIViewController
kelas yang membuat dan memiliki UIView dan juga menetapkan delegasi tampilan untuk dirinya sendiri. Ini adalah pemilik penahan tunggal dari pandangan itu. Ketika pengontrol mendapatkan dealloc'ed, maka view juga harus mendapatkan dealloc'ed. Apakah itu penting jika pointer delegasi menggantung?