swift中这样写通知的监听方式,就没有办法释放掉。
var observer: NSObjectProtocol? = {
var token: NSObjectProtocol?
token = NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: "11"), object: nil, queue: nil) { (note) in
print(Thread.current)
NotificationCenter.default.removeObserver(token!)
}
return token
}()
deinit {
NotificationCenter.default.removeObserver(observer!)
}
我释放了2次,都没有办法成功释放掉,但是如果不使用这种方式,正常的在viewDidLoad
里面写,就可以在deinit
中成功释放掉?我想知道为什么这样写法没法释放
问题解决,之前出现的问题是我在A控制器跳转到B控制器之前就先发送一个通知,结果进入B控制器第一次不会直接打印我通知里面的打印,后面返回再点击时候直接就打印我通知里面的内容,我以为通知没有释放掉,其实是因为模拟器速度太快,以及苹果的监听应该有个延迟时间,我把新建B控制器并且push延迟5秒执行后一切打印正常,说明代码本身没有问题