2010-12-23 16 views
7

initWithFrame: altında oluşturduğum özel UIView'de bir gözlemci ekledim.UIView'de NSNotification için bir gözlemci nasıl kaldırılır?

[[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(updateZipFromLocation:) 
      name:@"zipFoundFromLocation" 
      object:nil]; 

Sorun şu ki bu görünüm bir alt görüntüdür. Görünüm yeniden yüklendiğinde, initWithFrame mesajını tekrar çağırır, böylece iki gözlemci vb. Görünüm kaybolduğunda gözlemciyi nasıl kaldırabilirim? UIView olduğu için, viewWillDisappear:(BOOL)animated geçerli bir yöntem olmadığını söylüyor. Herhangi bir fikir?

+0

Sadece bir heads-up, KVO farklı kavramdır gözlemleyerek anahtar değeri ifade eder NSNotificationCenter'den. –

+0

Oops, hala hepsine biraz yeni. :) –

cevap

12

initWithFrame:'un bir kereden fazla çağrıldığını söylediniz, bu yüzden görüşün yok edildiğini ve yeniden oluşturulduğunu varsayalım. Sen görünüm artık herkes tarafından korunur çağrılacak dealloc gözlemci olarak görünümü kaldırabilirsiniz:

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [super dealloc]; 
} 
+0

Sorun şu ki, dealloc hiç çağrılmadı. NSLog ifadelerini oraya ve hepsine koydum. Belki de alt görümümü süper görüntülememde kaldırmam gerekiyor ve sonra da dealloc çağrılacak. –

+0

@sudo rm -rf Eğer 'dealloc' çağrılmıyorsa, ama 'initWithFrame:' bir kereden fazla çağrılıyorsa, bellek sızıntınız var gibi geliyor. Alt görüntülemelere artık ihtiyacınız kalmayacak kadar yayıldığınızdan emin olun (hemen ardından addSubview: 'genellikle uygun). –

+0

Alt görünümüm örnek değişken olarak oluşturuldu, böylece başka yöntemlerde erişebiliyorum. Bununla nasıl başa çıkmalıyım? Serbest bırakmak benim uygulamamı çökertti. –

İlgili konular