Küçük iPad uygulamamda bir gözlemci kullanan bir "dil değiştirme" fonksiyonum var. Her görünüm denetleyicisi, sırasında gözlemcime kendini kaydeder viewDidLoad:.
- (void)viewDidLoad
{
[super viewDidLoad];
[observer registerObject:self];
}
Kullanıcı "dili değiştir" düğmesine bastığında, yeni dil modelime kaydedilir ve gözlemci bilgilendirilir ve updateUi:kayıtlı nesneleri üzerinde bir seçici çağırır .
TabBarController içinde görünüm denetleyicileri olduğunda bu çok iyi çalışıyor. Bunun nedeni, sekme çubuğu yüklendiğinde, görünümleri başlatmadan sekme simgelerini alt denetleyicilerinden alır, bu nedenle viewDidLoad:çağrılmaz, bu nedenle bu görünüm denetleyicileri dil değişikliği bildirimleri almaz. Bu nedenle, registerObject:çağrılarımı inityönteme taşıdım .
viewDidLoad:Gözlemcime kayıt olurken ,viewDidUnload: unregister için. Şimdi kaydolduğumdan beri kayıt olmak initçok mantıklı dealloc.
Ama işte benim sorunum. Yazarken:
- (void) dealloc
{
[observer unregisterObject:self];
[super dealloc];
}
Bu hatayı alıyorum:
ARC, 'dealloc'un açık mesaj göndermesini yasakladı
[super dealloc]Üst sınıfların düzgün bir şekilde temizlenmesini sağlamak için aramam gerektiğinden, ancak ARC bunu yasakladı, şimdi sıkıştım. Nesnem ölürken haberdar olmanın başka bir yolu var mı?