Ben ayarlamak için diyerek önerileri gördüğüm NSZombieEnabled
için true
ayıklarken. NSZombie nedir? Bu bir çerçeve mi? Bir yer?
Ben ayarlamak için diyerek önerileri gördüğüm NSZombieEnabled
için true
ayıklarken. NSZombie nedir? Bu bir çerçeve mi? Bir yer?
Yanıtlar:
Hafızada hata ayıklama aracıdır. Spesifik olarak, ayarladığınızda, NSZombieEnabled
bir nesne serbest bırakılmak yerine tutma sayımına 0 ulaştığında, kendisini bir NSZombie
örneğe dönüştürür . Böyle bir zombi bir mesaj aldığında, çökmek veya öngörülemeyen bir şekilde davranmak yerine bir uyarı kaydeder. Bu nedenle, samanlık aramalarında gelişmiş araçlar veya zahmetli iğne olmadan ince aşırı sürüm / otomatik serbest bırakma sorunlarının hatalarını ayıklayabilirsiniz.
İsim, nesnelerin normalde "ölü" olarak kabul edildikleri gerçeği üzerine oldukça açık bir oyundur. Bu ayar ile, garip bir yarı ömür içinde var olmaya devam ederler - ne canlı ne de tamamen ölü. Daha az beyin yemeleri dışında gerçek zombiler gibi.
Adam, Zombilerin ne olduğunu açıklamak için harika bir iş çıkardı, ancak çevre değişkenini kullanmak bunları bulmanın ve izlemenin en iyi yolu değil.
Zombi tespitine çok daha iyi bir yaklaşım, sadece Aletleri kullanmaktır - XCode'dan "Aletle Çalıştır" ile başlayın ve "Tahsisler" i seçin.
Ardından, başladıktan hemen sonra kaydı durdurun, Allocations cihazındaki "i" düğmesine basın ve "referans sayılarını etkinleştir" ve "NSZombie Algılamayı Etkinleştir" i açın. Şimdi enstrümanda tekrar Kaydet'e basın ve uygulamanız başlayacaktır - herhangi bir zombi nesnesi gönderilirse, kayıt durur ve kayıt zaman çizelgesinde bir iletişim kutusu açılır - bir nesnenin bulunduğu her yeri bulmak için buna tıklayabilirsiniz. muhafaza edildi veya serbest bırakıldı.
Düzenleme: Önceki tavsiye XCode 3 içindi, işte XCode 4 için bir ekleme:
XCode 4.2'de , Zombi algılamayı kullanmak için daha da kolay bir mekanizma var: Zombi Enstrümanı. Uygulamayı başlatmak için "Çalıştır" yerine "Profil" i kullanın ve bir cihaz seçici çıkacaktır. "Zombi" yi seçin ve uygulama çalışmaya başlayacaktır - çökmenize neden olan her şeyi yapın, "Zombi Mesajlı" diyen bir iletişim kutusu açılır.
Oradan, iletişim kutusundaki küçük oku tıklayın. Bu, zombi nesnesinin oluşturulduğu, korunduğu veya serbest bırakıldığı tüm zamanların bir listesini alacaktır. Kenar çubuğunu yukarı çekin ve tutma sayısındaki her bir düzenlemeden sorumlu olan koda ilişkin yığın izine bakarak her bir girişe gidebilirsiniz.
Kendall'ın eklediği şeye katılıyorum, çok faydalı, ancak yine de ortam değişkenini yapmayı önereceğim, böylece etkin olduklarını unutmazsınız. Cocoa Dev'deki (artık süresi dolmuş) bağlantıya benzer şekilde, bunu kaçırmamam için koyuyorum:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
Çok güzel dikkatimi çekiyor.
Birine yardımcı olur.
Aletler hakkında ayrıntılı belge. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1