【发布时间】:2015-12-31 05:08:03
【问题描述】:
我的视图控制器的deinit函数在每次收到NSNotification并执行相应的选择器时都会被调用!!!
这是我的视图控制器的代码:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "initModels", name: "xyz.notification", object: nil)
}
func initModels(){
print("Received notification to init models")
}
deinit {
print("De-init view controller")
NSNotificationCenter.defaultCenter().removeObserver(self)
}
每个视图控制器收到通知后,都会正常执行“initModels”,然后直接调用“deinit”! 以下是控制台上打印的内容:
Received notification to init models
De-init view controller
我检查了与多线程相关的所有内容。 通知在主线程上发送,并在主线程上执行。
【问题讨论】:
-
也许你的 vc 被释放是有正当理由的(例如,引用它的局部变量超出范围)恰好在通知发送后发生......?
-
另外,让您的通知处理程序采用一个 NSNotification 类型的参数是一个好习惯(但我不确定您的签名有什么后果)。
标签: ios swift nsnotificationcenter nsnotification