当前位置:  开发笔记 > 编程语言 > 正文

没有被称为deinit的解释

如何解决《没有被称为deinit的解释》经验,为你挑选了1个好方法。

我有一个视图控制器(用于登录),它定义了删除观察者的deinit方法.当用户点击Register按钮时,控制器调用performSegueWithIdentifier来加载注册视图控制器.我定义了deinit方法来删除所有观察者.但是,该方法未被调用.我在某处读到它是因为viewcontroller没有被销毁而且指向它的指针被保存在某处.有谁可以解释这背后的原因?

谢谢

编辑:虽然我同意评论部分提供的链接持有相同的问题,但没有答案或明确的答案.最高的upvoted回复建议在deinit中定义一些内容而不是留空.这并没有回答我正在寻找的探索.出于这个原因,我一直保持这个问题,直到有人能够指出我的理解是不正确的.而且,我确实认为马特简明扼要地解释了它.



1> matt..:

deinit在预期时未能触发的通常原因是您有一个保留周期,阻止您的视图控制器不存在.

(有时原因是你希望视图控制器在这种情况下被销毁是不正确的.但假设它是正确的,保留周期就是原因.)

你提到删除所有观察者.什么样的观察者?如果我们谈论的是NSNotification,那通常就是如何获得保留周期.通知中心会保留观察者,直到您取消注册.因此,你不能得到deinit,直到之后的观察者已被删除.因此,你不能删除观察者 deinit.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有