NSZombie nedir?


Yanıtlar:


195

Hafızada hata ayıklama aracıdır. Spesifik olarak, ayarladığınızda, NSZombieEnabledbir 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.


61
Hata ayıklamayı bitirdiğinizde bu ayarı kaldırmaya dikkat edin çünkü aslında her nesneyi sızdırıyor.
Justin

1
Bu basit açıklama için teşekkürler. Cocoa Dev Link'in artık çalışmadığını bildirelim. Kısa ve öz için +1.
CRDave

95

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.


2
Bu inanılmaz derecede faydalı bir tavsiye.
w.donahue

4
Enstrümanlar'da Zombi tespiti yapmayı daha da kolaylaştırdığı için XCode 4 için cevabı güncelledim.
Kendall Helmstetter Gelner

Gerçekten değil, XCode 5 ve 6 ile hemen hemen aynı şekilde çalışmalı.
Kendall Helmstetter Gelner

2
Ben de ile teyit edebiliriz XCode 7.2
Ritim

31

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.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.