我有一个带按钮操作的视图控制器:
@IBAction func MultiplayerButtonClick(sender: AnyObject) {
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: NotificationConstants.pvpConnEstablishedSelector,
name: NotificationConstants.pvpConnEstablishedString ,
object: nil)
setUpGameScene()
initiateMultiplayerGC()
}
在某个地方,会发布一条通知,触发此观察者的选择器:
//action for pvpConnEstablishedSelector
func hideMainView() {
MenuView.hidden = true
//NSNotificationCenter.defaultCenter().removeObserver(self) ???
}
是否是在作为观察者选择器的函数中调用removeObserver
的好地方?
或者有更合适的地方吗?
答案 0 :(得分:2)
有几点意见:
我从您的代码注释中推断出您正在考虑删除选择器中针对该特定通知的观察者。这是一个很好的做法。
我对于调用removeObserver
时要小心,因为这会删除您可能已设置的所有观察者。如果你在作为特定通知的选择器的例程中调用它,那么我可能倾向于仅删除该特定通知:
NSNotificationCenter.defaultCenter().removeObserver(self, name: NotificationConstants.pvpConnEstablishedString, object: nil)
是的,此时,您可能只是观察了一个通知,因此这可能是不必要的,但如果在将来某个日期您为不同的通知添加完全单独的通知处理代码,您需要确保#39; t在处理特定通知时意外删除了所有观察者。
您可能希望对通知进入之前可能会解除此视图控制器的可能性保持敏感。在这种情况下,在{{1}中添加removeObserver
可能也是谨慎的。视图控制器的方法。
在这种情况下,简单的deinit
是谨慎的(因为在取消分配视图控制器时删除所有观察者是合理的。)
答案 1 :(得分:0)
您不再需要从ios9 +中删除observer。它会自动删除。