在解雇呈现的UIViewController

时间:2016-04-05 14:32:52

标签: ios swift

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

应用程序:它是一个相当复杂的iOS应用程序,在Swift中开发了基于tabbar的导航。它有很多推动和演示。

问题:当呈现的视图控制器被解除时,我们偶尔遇到应用程序崩溃。这些崩溃是不可重现的,你找不到这种情况肯定会发生的情况。该应用程序不会崩溃,表明我们的代码中有一行。在iOS 8和iOS 9设备的各种版本中都可以看到它。我们永远不会得到任何与崩溃有关的日志。

Crash State Screen Shot

Crash State Screen Shot 2

如图所示,可以继续下去。但是,在不断观察几个月的崩溃情况时,我们已经注意到Xcode窗口左侧栏中的Thread 1上有一些东西。导致崩溃的堆栈将始终以[UINavigationController viewWillAppear:]

结束

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

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

1 个答案:

答案 0 :(得分:0)

您使用的是委托模式吗?如果是,则委托属性应始终声明为弱。我猜你有一个强大的代理属性,并且使用通知的控制器没有被释放。