试图调试用户在我们的崩溃报告工具或日志文件中没有显示的崩溃。有一个理论,它可能取决于内存压力,但不确定如果iOS在前台杀死应用程序应用程序,是否会调用applicationWillTerminate
。我们在applicationWillTerminate
中写入日志文件,但显然在此崩溃期间没有被调用。
如果应用程序崩溃,则没有生命周期方法可靠地称为。相反,您可以创建&注册一个在这种情况下被调用的全局异常处理程序:
func exceptionHandler(exception: NSException) {
print("*** UNHANDLED EXCEPTION ***")
print(exception)
print("CALL STACK:")
print(exception.callStackSymbols.joined(separator: "n"))
}
使用NSSetUncaughtExceptionHandler
注册此功能,例如在您的UIApplicationDelegate.application:didFinishLaunchingWithOptions:
中:
NSSetUncaughtExceptionHandler(exceptionHandler)
系统必须触发 applicationWillTerminate
,如果它上升才能杀死该应用程序。但是,您不能确定应用程序实际将被杀死之前需要多少时间。也许没有足够的时间编写日志。由于内存消耗系统杀死应用程序之前,应发送记忆警告。您可以通过模拟模拟器上的内存警告来测试最后一个。如果applicationWillTerminate
未调用,则需要通过系统终止,并且您崩溃与内存消耗无直接相关。