ios - 关闭呈现的 UIViewController 时应用程序偶尔崩溃

标签 ios swift

过去几个月,我们正在开发的应用程序间歇性地面临以下问题。

应用程序:这是一个相当复杂的 iOS 应用程序,具有用 Swift 开发的基于选项卡栏的导航。它有大量的推送和演示。

问题:当呈现的 View Controller 被关闭时,我们偶尔会遇到应用程序崩溃的情况。这些崩溃是不可重现的,并且您找不到肯定会发生这种情况的场景。应用程序不会崩溃,表明我们的代码中有一行。在 iOS 8 和 iOS 9 设备的各个版本中都观察到了这一情况。我们从未收到任何与崩溃相关的日志。

Crash State Screen Shot

Crash State Screen Shot 2

如图所示,没有什么可继续的。但是,通过几个月来对崩溃的持续观察,我们注意到 Xcode 窗口左侧栏中的线程 1 上有一些东西。导致崩溃的堆栈始终以 [UINavigationController viewWillAppear:]

结尾

此外,如堆栈中所示,有一行指示“_CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER...”,这使我们怀疑正在释放的类上调用 NSNotification 选择器。为此,我们确保在释放之前删除了所有类中的所有 NSNotification 观察者,并且还在每个类的 deinit 方法中记录了日志,并确保它们在需要时释放。这仍然没有解决问题。

有人可以帮我们解决这个问题吗?

最佳答案

您使用委托(delegate)模式吗?如果是,那么委托(delegate)属性应始终声明为弱。我猜您在某处对委托(delegate)属性有很强的引用,并且使用通知的 Controller 没有被释放。

关于ios - 关闭呈现的 UIViewController 时应用程序偶尔崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36429386/

相关文章:

ios - 如何在UIScrollView中为键盘实现ResignFirst Responder?

ios - PrepareForSegue之谜

ios - 在 Swift 中将分数从 UITextField 转换为小数

json - SwiftHttp + JSON解码器

json - firebase 数组解析 json 总是失败

ios - UIButtons 未显示在 UIScrollView 中

ios - Metal 顶点着色器扩展单个三角形

ios - 减少 SpriteKit 游戏的电池使用量

iphone - 用于显示iPhone的iAd的用户权限

ios - 在 while 循环中更新 UIView 背景颜色