我有一个 View Controller (用于登录),它定义了deinit方法来删除观察者。当用户点击“注册”按钮时, Controller 将调用performSegueWithIdentifier来加载注册 View Controller 。我定义了deinit方法来删除所有观察者。但是,没有调用该方法。我在某个地方读到它是因为viewcontroller没有被破坏,并且指向它的指针被保存在某个地方。谁能解释这背后的原因?
谢谢
编辑:尽管我同意注释部分中提供的链接包含相同的问题,但是没有答案或明确的答案。最高评价的答复建议在deinit中定义某些内容,而不是将其保留为空白。那并不能解决我要寻找的爆炸问题。因此,我会一直保留这个问题,直到有人指出我的理解是错误的为止。此外,我确实认为Matt可以简洁明了地解释它。
最佳答案
未能按预期触发deinit
的常见原因是您有一个保留周期,以防止 View Controller 消失。
(有时,原因是您期望在这种情况下会破坏 View Controller 是不正确的。但是假设它是正确的,则是保留周期。)
您提到删除所有观察者。什么样的观察员?如果我们谈论的是NSNotification,那么通常这就是您获得保留周期的方式。通知中心将保留观察者,直到您取消注册为止。因此,只有在删除观察者之后,才能获得deinit
。因此,您无法在deinit
中删除观察者。
关于ios - 未调用deinit的说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41772225/