Xcode 4'te NSZombieEnabled'ı nasıl ayarlarım?


456

Nasıl kurarım NSZombieEnabledve CFZombieLevelXcode 4 benim yürütülebilir için?


1
Xcode 4 hakkında soru soruyor musunuz?
Jehiah

8
Bunun gibi seçenekler varsayılan olarak neden etkinleştirilmiyor?
Daniel Magnusson

26
Temelde, varsayılan olarak etkinleştirmek için iyi bir fikir gibi görünmeyen gerçek bir bellek boşluğunu önler.
Chetan

14
@Daniel Magnusson: Bu, hayatta kalan en uygun şey. XCode ile gelişmeyi düşmanca ama uygulanabilir hale getirerek daha iyi geliştiriciler elde edersiniz. Şaka yapıyorum.
Dan Rosenstark

3
@DanielMagnusson Bence bu kötü bir fikir değil, AFAIK "Zombi" modu her nesneyi özel bir ob nesnesine değiştirecek, böylece mesaj gönderdiğinde bunu tespit edebilecek. "Zombi modu" nu etkin hale getirmek hiçbir nesnenin yerinden oynatılmamasına neden olur, bu yüzden gerçekten sadece bu tür hatalarla uğraşırken kullanmalısınız.
Besi

Yanıtlar:


753

Xcode 4.x'te

R

(veya tıklama Menubar> Product> Scheme> Edit Scheme)

"Teşhis" sekmesini seçin ve "Zombi Nesnelerini Etkinleştir" i tıklayın:

"Zombi Nesnelerini Etkinleştir" i tıklayın

Bu, serbest bırakılan nesneleri tekrar kullanıldığında konsol uyarılarını yazdıran NSZombie örneklerine dönüştürür. Bu, bellek kullanımını artıran (hiçbir nesne gerçekten serbest bırakılmayan) ancak hata raporlamayı geliştiren bir hata ayıklama yardımcısıdır.

Tipik bir durum, bir nesneyi aşırı serbest bıraktığınızda hangisini bilmediğinizdir:

  • Zombilerle: -[UITableView release]: message sent to deallocated instance
  • Zombiler olmadan: EXC_BAD_ACCESS

Uygulamayı App Store gönderimi için arşivlediğinizde bu Xcode ayarı yok sayılır. Başvurunuzu bırakmadan önce hiçbir şeye dokunmanıza gerek yoktur.

Basma R, Alttuşu basılı tutarken Ürün> Çalıştır'ı seçmekle aynıdır .
"Zombi Nesnelerini Etkinleştir" onay kutusunu tıklamak, Bağımsız Değişkenler sekmesinin "Ortam Değişkenleri" bölümüne manuel olarak "NSZombieEnabled = YES" eklemekle aynıdır.


27
Teşekkürler - Bu seçenekleri nereye sakladıklarını merak ediyordum.
emp

1
Sadece buna eklemek için, "Çalıştır" ekranında yapmak "Çalıştır eyleminin seçeneklerini kullan" kutusunun işaretli olup olmadığını "Test" olarak ayarlar. Sadece Test için yapmak istiyorsanız, bu kutunun işaretinin kaldırılması gerekiyor
Cameron

1
Lütfen bu seçeneğin Xcode 4.1'de (doğru?) Göründüğüne dikkat edin
phi

2
XCode 5'te (ve kesin olarak 4 - 4.3.x'in sonraki sürümlerinde, belki daha önce), bu CMD-<( CMD-SHIFT-comma) veyaProduct -> Scheme -> Edit SCheme...
Olie

1
Ben bunun için bana doğrudan eğer iyi olurdu, hatta Zombiler atlanır, garip EXC_BAD_ACCESS sayısında şaşırıp stackoverflow.com/questions/29210057/...
Anoop Vaidya

70

Jano'nun cevabı, onu bulmanın en kolay yoludur .. Şema açılır çubuğuna -> şemayı düzenle -> bağımsız değişkenler sekmesine tıkladıktan sonra Çevre Değişkenleri sütununda NSZombieEnabled ve değer sütununa EVET eklerseniz başka bir yol olurdu ...


57

Bu alternatifi daha uygun buluyorum:

  1. "Çalıştır Düğmesi Açılır Menüsü" nü tıklayın
  2. Listeden seçin Profile
  3. "Aletler" programı da seçebileceğiniz yerde açılmalıdır Zombies
  4. Artık uygulamanızla etkileşime girebilir ve hataya neden olabilirsiniz
  5. Hata meydana gelir gelmez, nesnenizin ne zaman serbest bırakıldığı ve bu nedenle yeniden yerleştirildiği hakkında bir ipucu almalısınız.

Zombiler

Bir zombi tespit edilir edilmez, söz konusu nesnenin ne zaman tahsis edildiğini ve nerede tutulduğunu veya serbest bırakıldığını gösteren düzgün bir "Zombi Yığını" elde edersiniz:

Event Type    RefCt     Responsible Caller
Malloc            1     -[MyViewController loadData:]
Retain            2     -[MyDataManager initWithBaseURL:]
Release           1     -[MyDataManager initWithBaseURL:]
Release           0     -[MyViewController loadData:]
Zombie           -1     -[MyService prepareURLReuqest]

Xcode Şemalarının tanılama sekmesini kullanmaya kıyasla avantajları :

  1. Tanılama sekmesindeki seçeneğin işaretini kaldırmayı unutursanız, bellekten hiçbir nesne bırakılmaz.

  2. Bozuk nesnenizin hangi yöntemlerle ayrıldığını / serbest bırakıldığını veya tutulduğunu gösteren daha ayrıntılı bir yığın elde edersiniz.


1
XCode 4'ümde "zombiler" seçeneği eksik, neden?
Li Fumin

4
iOS Simulator > AllAna şablon listesinden seçim yaptığınızdan emin olun (Bunu sadece simülatörde yapabilirsiniz)
Besi

bir sebepten ötürü ... eğer 'zombileri' seçersem sadece tahsisleri gösterir .. neden herhangi bir fikir?
Ocak'ta abbood

Bu en iyi çözümdür. Bana çok yardımcı oldu :)
Michał Miszczyszyn

5

Xcode 4.2'de

  • Proje Adı / Düzenleme Düzeni / Tanılama /
  • Zombi Nesnelerini Etkinleştir onay kutusu
  • Sen bittin


1

Kakao, bu tür hata ayıklama yeteneklerinizi büyük ölçüde artıran harika bir özellik sunar. Bu NSZombieEnabled denir bir ortam değişkeni, bu seyretmek videoyu objektif-C NSZombieEnabled kurma açıklar


-1

Xcode> 4.3'te:

Şema açılır çubuğuna -> şemayı düzenle -> bağımsız değişkenler sekmesine tıklayın ve ardından Ortam Değişkenleri sütununda NSZombieEnabled ve değer sütununa YES ekleyin.

İyi şanslar !!!

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.