ios - 收到 NSNotification 后执行选择器会调用我的 View Controller 的 deinit

标签 ios swift nsnotificationcenter nsnotification

每次我收到 NSNotification 并执行相应的选择器时,都会调用我的 View Controller 的 deinit 函数! 这是我的 View Controller 的代码:

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)
}

每个 View Controller 收到通知后,都会正常执行“initModels”,但随后会直接调用“deinit”! 以下是控制台上打印的内容:

Received notification to init models
De-init view controller

我检查了与多线程相关的所有内容。 通知在主线程上发送,并在主线程上执行。

最佳答案

天哪! 由于我不知道的原因,当选择器名称以“init”开头时,它会导致调用 View Controller 的 deinit 函数!

这是我尝试过的函数名称:

  • initModels >> 调用 deinit
  • init_models >> 调用 deinit
  • initmodels >> 工作正常
  • initializeModels >> 工作正常

关于ios - 收到 NSNotification 后执行选择器会调用我的 View Controller 的 deinit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34541322/

相关文章:

javascript - iOS touchstart 和 touchmove 之间的延迟?

ios - 如何根据键入的文本增加文本字段的宽度?

ios - NSNotificationCenter 使用了多少内存

ios - 在 iOS 中使用 NSNotificationCenter 传递 userInfo 数据的更好方法

iphone - postNotificationName 未调用观察者方法

ios - 如何以编程方式使用自动布局在 ScrollView 中水平放置 N 个 View ?

iphone - If 语句不适用于空格字符

ios - 更改多个平台 iOS 的背景图像

iOS swift : Array of Range

ios - Swift - UISearchController 与单独的 searchResultsController