在我的应用程序中,我有一些VC需要从我的模型接收NSNotifications,这是异步获取数据。问题是VC会不时消失,当模型完成获取数据并尝试向已经消失的VC发送通知时,应用程序崩溃。有没有选项来防止这种崩溃?就像告诉NSNotificationCenter“如果观察者不在那里就可以了”?
:)
// Subscribe for notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finishedLoading) name:@"Finished Loading" object:nil];
// Model sends a notification to a subscribed VC
[[NSNotificationCenter defaultCenter] postNotificationName:@"Finished Loading" object:nil userInfo:nil];
答案 0 :(得分:2)
请务必调用此方法(removeObserver:或 removeObserver:name:object :)在notificationObserver或任何对象之前 在addObserver中指定:selector:name:object:is deallocated。
将removeObserver调用添加到观察者的dealloc。
- (void)dealloc{
...
[[NSNotificationCenter defaultCenter] removeObserver:self ];
...
}
答案 1 :(得分:1)
我想,你只需要这样做:
[[NSNotificationCenter defaultCenter] removeObserver:self ];
答案 2 :(得分:1)
每次拨打NSNotificationCenter removeObserver...
时,您都必须致电addObserver...
。这通常在dealloc
方法中完成。
答案 3 :(得分:0)
老实说,通过这种方法,您可以缓解症状而不是治愈疾病。
如果您使用AFNetworking等异步网络库来返回NSOperation
个实例,那么最好在NSOperationQueue
中管理这些实例。然后,当弹出控制器时,在viewWillDisappear
方法中,取消所有未完成的异步请求:
[myOpQueue cancelAllOperations];