代码之家  ›  专栏  ›  技术社区  ›  spogebob92

当前台的应用程序内存不足崩溃时,调用应用程序代理生命周期的哪个部分?

  •  2
  • spogebob92  · 技术社区  · 7 年前

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   dr_barto    7 年前

    如果应用程序崩溃,则不会可靠地调用任何生命周期方法。相反,您可以创建;注册在这种情况下调用的全局异常处理程序:

    func exceptionHandler(exception: NSException) {
      print("*** UNHANDLED EXCEPTION ***")
      print(exception)
      print("CALL STACK:")
      print(exception.callStackSymbols.joined(separator: "\n"))
    }
    

    使用注册此函数 NSSetUncaughtExceptionHandler ,例如 UIApplicationDelegate.application:didFinishLaunchingWithOptions: :

    NSSetUncaughtExceptionHandler(exceptionHandler)
    
        2
  •  -1
  •   MichaelV    7 年前

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