在我的小 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 禁止这样做,所以我现在被卡住了。当我的对象快要死去时,还有其他方法可以得到通知吗?