NSNotification - 如何防止意外崩溃?

时间:2013-09-23 14:43:16

标签: ios nsnotification

在我的应用程序中,我有一些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];

4 个答案:

答案 0 :(得分:2)

Apple Documentation

  

请务必调用此方法(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];