Saya telah melihat saran yang mengatakan untuk disetel NSZombieEnabled
ke true
saat debugging. Apa itu NSZombie? Apakah ini kerangka kerja? Sebuah pengaturan?
Saya telah melihat saran yang mengatakan untuk disetel NSZombieEnabled
ke true
saat debugging. Apa itu NSZombie? Apakah ini kerangka kerja? Sebuah pengaturan?
Jawaban:
Ini adalah bantuan debugging memori. Khususnya, saat Anda menyetel NSZombieEnabled
lalu setiap kali sebuah objek mencapai jumlah pertahankan 0, alih-alih dialokasikan, objek itu akan berubah menjadi NSZombie
instance. Setiap kali zombie menerima pesan, itu mencatat peringatan daripada menabrak atau berperilaku dengan cara yang tidak dapat diprediksi. Dengan demikian, Anda dapat men-debug masalah pelepasan-berlebih / pelepasan otomatis yang halus tanpa alat canggih atau jarum yang teliti dalam pencarian tumpukan jerami.
Nama tersebut adalah permainan yang cukup jelas pada kenyataan bahwa benda-benda biasanya dianggap "mati" ketika mencapai hitungan 0. Dengan pengaturan ini, mereka terus ada dalam paruh yang aneh - tidak hidup, atau cukup mati. Mirip seperti zombie sungguhan, kecuali mereka makan lebih sedikit otak.
Adam melakukan pekerjaan yang bagus menjelaskan apa itu Zombie, tetapi menggunakan variabel lingkungan bukanlah cara terbaik untuk menemukan dan melacaknya.
Pendekatan yang jauh lebih baik untuk deteksi zombie, hanya dengan menggunakan Instrumen - dari XCode dimulai dengan "Jalankan dengan Instrumen" dan pilih "Alokasi".
Kemudian hentikan perekaman tepat setelah dimulai, tekan tombol "i" pada instrumen Alokasi, dan aktifkan "aktifkan jumlah referensi" dan "Aktifkan Deteksi NSZombie". Sekarang tekan Rekam lagi di instrumen, dan aplikasi Anda akan mulai - jika ada objek zombie yang dikirim, rekaman pesan akan berhenti, dan kotak dialog akan muncul di garis waktu perekaman - Anda dapat mengekliknya untuk menemukan setiap tempat objek berada. dipertahankan atau dilepaskan.
Sunting: Saran sebelumnya untuk XCode 3, berikut adalah tambahan untuk XCode 4:
Di XCode 4.2 , ada mekanisme yang lebih mudah untuk menggunakan deteksi Zombie - Instrumen Zombie. Alih-alih "Jalankan" untuk memulai aplikasi, gunakan "Profil" dan pemilih instrumen akan muncul. Pilih "Zombie", dan aplikasi akan mulai berjalan - lakukan apa pun yang menyebabkan crash Anda, sebuah dialog akan muncul yang bertuliskan "Zombie Messaged".
Dari sana, klik panah kecil di kotak dialog. Itu akan membawa ke daftar waktu kapan objek zombie dibuat, dipertahankan, atau dirilis. Tarik bilah samping dan Anda dapat pergi ke setiap entri, melihat jejak tumpukan untuk kode yang bertanggung jawab untuk setiap penyesuaian dalam jumlah penahanan.
Saya setuju dengan apa yang ditambahkan Kendall, ini sangat berguna, tetapi saya akan menyarankan tetap melakukan variabel lingkungan sehingga Anda tidak lupa bahwa mereka diaktifkan. Mirip dengan tautan (sekarang kedaluwarsa) di Cocoa Dev, saya meletakkan ini jadi saya tidak melewatkannya:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
Ini menarik perhatian saya dengan sangat baik.
Akan membantu seseorang.
Dokumen rinci tentang Instrumen. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1