在过去的几个月里,我们正在开发的应用程序中间歇性地面临以下问题。
应用程序:它是一个相当复杂的iOS应用程序,在Swift中开发了基于tabbar的导航。它有很多推动和演示。
问题:当呈现的视图控制器被解除时,我们偶尔遇到应用程序崩溃。这些崩溃是不可重现的,你找不到这种情况肯定会发生的情况。该应用程序不会崩溃,表明我们的代码中有一行。在iOS 8和iOS 9设备的各种版本中都可以看到它。我们永远不会得到任何与崩溃有关的日志。
如图所示,可以继续下去。但是,在不断观察几个月的崩溃情况时,我们已经注意到Xcode窗口左侧栏中的Thread 1上有一些东西。导致崩溃的堆栈将始终以[UINavigationController viewWillAppear:]
结束此外,如堆栈中所示,是一行表示' _CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER ...'这使我们怀疑在解除分配的类上调用了NSNotification选择器。为此,我们确保在解除分配之前删除了所有类中的所有NSNotification观察者,并且还记录了每个类的deinit方法,并确保在需要时解除分配。这仍然没有解决问题。
有人可以帮我们解决这个问题吗?
答案 0 :(得分:0)
您使用的是委托模式吗?如果是,则委托属性应始终声明为弱。我猜你有一个强大的代理属性,并且使用通知的控制器没有被释放。