2010-09-16 13 views
6

iPhone oyunu yapıyorum. Tahsis edilen veya tutulan tüm nesneleri serbest bırakmak istiyorum. dealloc işlevinde, tüm bu nesneleri serbest bırakıyorum, ancak daha sonra, henüz tahsis edilmedikleri zaman nesneleri serbest bıraktığımı fark ettim. Bu yüzden, retainCount'un sıfırdan büyük olup olmadığını kontrol etmem gerektiğine karar verdim.Atanan veya tutulan bir nesneyi kaç kez serbest bırakırım?

Sorum şu:

Sadece retainCount sıfırdan büyük olup olmadığını kontrol sonra bırakın musunuz?

if([bg retainCount]!=0) 
{ 
    [bg release]; 
} 

veya

ben onun retainCount

olarak bunu Yardımlarınız için
while([bg retainCount]!=0) 
{ 
    [bg release]; 
} 

Teşekkür olarak defalarca serbest olmalı!

+23

Herhangi bir nesnenin 'retainCount'u ** işinizin ** hiçbiri **. Bir hata ayıklama yardımcısı olarak var ama daha fazla bir şey yok. Üretim kodu asla buna bağlı olmamalıdır. – Sven

+9

BTW - kodun doğru olmasını sağlamaz - ancak, tanımı gereği, "retainCount" 0'a asla dönemez çünkü nesne zaten gerçekleşen süreye göre ayrılmışsa ..... – bbum

+0

Analiz edin (örneğin Clang analizörü). Size yanlış gittiğiniz yere işaret edebilir. –

cevap

77

-retainCount kullanmayın.

Bir nesnenin mutlak korunma sayısı anlamsızdır. release numaralı nesneyi, nesnenin korunmasına neden olan tam olarak aynı sayıda kez aramalısınız. Daha az (sızıntıları sevmediğiniz sürece), ve kesinlikle, artık yok (kazaları sevmedikçe).

Ayrıntılar için Memory Management Guidelines'a bakın.

+10

Bir yere dövme yaptırmış olmalısın. –

+4

@bbum: rdar: // 8122368 (http://openradar.appspot.com/8122368 hepimiz elma olmayanlar için) –

+0

Şimdiye kadar retainCount kullanmadım ama yapmam gerekeni merak ediyordum. Temizlemek için teşekkürler :) Oyuncunun oyunda öldüğü zaman bir ön plan görüntüsü tahsis ediyorum. Şimdi eğer oyuncu tüm seviyeyi ölmeden seviyeyi tamamlarsa, o zaman dealloc'ta önplanın serbest bırakılıp bırakılmamasını nasıl kontrol ederim? Foregrounf'un kullanılıp kullanılmadığını kontrol etmek için sadece bir bayrak kullanır mıyım? – abhinav

İlgili konular