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ı init
yö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ı?