在我的iPad小应用程序中,我有一个使用观察者的“切换语言”功能。每个视图控制器在viewDidLoad:
期间将自己注册给我的观察者。
- (void)viewDidLoad
{
[super viewDidLoad];
[observer registerObject:self];
}
当用户点击“更改语言”按钮时,新语言被存储在我的模型中,观察者被通知并在其注册的对象上调用updateUi:
选择器。
这工作得很好,除了当我在TabBarController中有视图控制器时。这是因为当标签栏加载时,它从它的子控制器中获取标签图标而不初始化视图,所以viewDidLoad:
没有被调用,所以那些视图控制器不会收到语言更改通知。因此,我将registerObject:
调用移动到init
方法中。
回到我使用viewDidLoad:
向观察者注册时,我使用viewDidUnload:
取消注册。因为我现在在init
中注册,所以在dealloc
中取消注册很有意义。
但这是我的问题。当我写到:
- (void) dealloc
{
[observer unregisterObject:self];
[super dealloc];
}
我得到这个错误:
ARC禁止显式发送'dealloc'消息
因为我需要调用[super dealloc]
来确保超类正确地清理,但ARC禁止这样做,所以我现在陷入了困境。当我的对象死亡时,是否有其他方法来获得通知?