Ios 当前台的应用程序内存不足崩溃时,调用应用程序委托生命周期的哪一部分?

Ios 当前台的应用程序内存不足崩溃时,调用应用程序委托生命周期的哪一部分?,ios,iphone,swift,memory-management,memory-leaks,Ios,Iphone,Swift,Memory Management,Memory Leaks,尝试调试用户正在发生的崩溃,但该崩溃没有显示在我们的崩溃报告工具或日志文件中。有一个理论,它可能是由于内存压力,但不确定如果iOS在前台杀死一个应用程序,应用程序是否会终止。我们在应用程序中写入日志文件将终止,但显然在这次崩溃期间没有调用它 系统必须触发应用程序将终止,如果它启动以终止应用程序。然而,你们不能确定你们需要多长时间才能让这个应用程序真正死掉。也许写日志的时间不够。在由于内存消耗而终止应用程序之前,系统应发送内存警告。您可以通过在模拟器上模拟内存警告来测试最后一个。如果未调用appl

尝试调试用户正在发生的崩溃,但该崩溃没有显示在我们的崩溃报告工具或日志文件中。有一个理论,它可能是由于内存压力,但不确定如果iOS在前台杀死一个应用程序,应用程序是否会终止。我们在
应用程序中写入日志文件将终止
,但显然在这次崩溃期间没有调用它

系统必须触发
应用程序将终止
,如果它启动以终止应用程序。然而,你们不能确定你们需要多长时间才能让这个应用程序真正死掉。也许写日志的时间不够。在由于内存消耗而终止应用程序之前,系统应发送内存警告。您可以通过在模拟器上模拟内存警告来测试最后一个。如果未调用
applicationWillTerminate
,则希望由系统终止,并且崩溃与内存消耗没有直接关系

如果应用程序崩溃,则不会可靠地调用任何生命周期方法。相反,您可以创建并注册一个全局异常处理程序,该处理程序在本例中被调用:

func exceptionHandler(exception: NSException) {
  print("*** UNHANDLED EXCEPTION ***")
  print(exception)
  print("CALL STACK:")
  print(exception.callStackSymbols.joined(separator: "\n"))
}
使用
NSSetUncaughtExceptionHandler
注册此函数,例如在您的
UIApplicationLegate中。应用程序:didFinishLaunchwithOptions:

NSSetUncaughtExceptionHandler(exceptionHandler)

您可以在调试器中设置具有相同结果的异常断点,而无需任何代码行。(导航中的断点选项卡,+按钮位于左角),但它不是silverbullet,通常您无法从这些异常中获得任何合适的结果。但是,删除这几行代码将把所有未处理的异常打印到控制台(或日志系统,并因此将其持久化),这通常是我希望作为进一步分析步骤的起点,I get
C函数指针只能通过对`NSSetUncaughtExceptionHandler(exceptionHandler)`行上的'func'或文字闭包的引用形成。您必须将其定义为全局函数,而不是成员方法。或者,正如错误消息所示,您也可以直接传入闭包:
NSSetUncaughtExceptionHandler({print($0)})