Diyorsun ki:
bırakma hattı sözlükte değil aslında bırakma herhangi bir nesneyi yok. Bunların tümünü bir sonraki satırda görebiliyorum. numaralı satırın, sözlüğünün sıfırlandığı yürütülür. Bunu yapmak için daha iyi bir yolu var mı?
değişken sözlük -release
sözlük ayırmanın için neden olursa
- o zaman değişken Sözlük tüm nesneleri içerdiği yayınlayacak - sıfıra sayımı korumak düşer. Her zaman. nesneler serbest bırakılması değilse Böylece, o zaman bu "düzeltmeyi" önerdi
...
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
... Bir bellek NSMutableDictionary orijinal örneği sızdırılmış olacağını içinde sızıntı olduğunu.
-removeAllObjects
olacak Sözlük boş ve içerdiği tüm nesneleri serbest çağıran bir sonucu olarak
,
ama yine de anlamaya ve düzeltmek gereken bir bellek sızıntısı var.
Açık olmak gerekirse: Sözlük (-removeAllObjects
uğramadan) Yukarıdaki -release
aldığında sözlükte nesneler ayırmanın değilseniz
ardından bir bellek sızıntısı yoktur. Öyle ya:
sözlükte nesneler fazladan zaman muhafaza edilmiştir.
Sözlükte hala olağanüstü bir -retain
var.
sen ayırmanın (beklendiği gibi) varsa -removeAllObjects
çağırdığınızda nesneleri düzgün ediliyor demek olduğundan, o zaman olmalıdır (2). Kodunuza bakın ve sözlüğün fazladan -retain
olduğu yeri bulun. Tüm muhafazaların tam olarak nereden geldiğini anlamak için Nesne Alloc aletini kullanabilirsiniz. Apple's documentation den
Haklısınız. Bir sebepten ötürü, başlangıçta denediğimde kod ipucunda görünmüyordu ... bu yüzden müsait olmadığını farz ettim. Şimdi anlıyorum. Teşekkürler. – 4thSpace
Bu soruya cevap vermiyor. Sözlükdeki '-release 'tüm içerilen nesneleri serbest bırakır. 4. alanın farklı bir sorunu var. – bbum
Sadece bir NSDictionary yayınlarsanız ve nesneler serbest bırakılmazsa, bu nesnelerin birden fazla korumaya sahip olduğu anlamına gelir, başka bir deyişle, başka yerlerde uygun şekilde yayınlanmamakta ya da edilmemek anlamına gelmektedir. Nesneleri sözlüğe eklediğinizde, bunları düzgün bir şekilde bırakıyor musunuz (veya otomatik olarak kaldırıyor)? – lucius