我有一个本机 iOS 应用程序,它通过将 ViewControllers 推送到根导航控制器上来创建视图层次结构。
有时我发现应用程序突然消失了。它似乎没有崩溃,因为该应用程序仍然存在于 iPad 任务栏中。但似乎一个或多个视图卸载,将用户返回主页。该应用程序在 iPad 任务栏中仍然可见,并且可以通过点击任务栏中的图标重新打开。
UIViews 可以就这样消失吗?我该如何调试呢?
非常感谢。
我有一个本机 iOS 应用程序,它通过将 ViewControllers 推送到根导航控制器上来创建视图层次结构。
有时我发现应用程序突然消失了。它似乎没有崩溃,因为该应用程序仍然存在于 iPad 任务栏中。但似乎一个或多个视图卸载,将用户返回主页。该应用程序在 iPad 任务栏中仍然可见,并且可以通过点击任务栏中的图标重新打开。
UIViews 可以就这样消失吗?我该如何调试呢?
非常感谢。
它似乎没有崩溃,因为该应用程序仍然存在于 iPad 任务栏中。
这真的不能告诉你任何事情。您描述的“任务栏”不是当前正在运行的进程列表;这是最近使用过的应用程序列表。列出的应用程序现在可能正在运行,也可能未运行。
要判断您的应用程序是否崩溃,请在 Xcode 管理器中选择设备,然后查看设备日志列表。如果您的应用程序崩溃,最新的日志文件将与您的应用程序名称一起列在“进程”列下。选择该日志并查看 - 您可能会看到如下内容:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x80938733
Crashed Thread: 0
日志的其余部分将为您提供有关崩溃时每个线程正在做什么的一些信息。
最近的日志也可能不是来自您的应用程序,而是在 Process 和 Type 列下列为Unknown/Unknown
. 该日志将仅包含进程列表和每个进程使用的内存页数。在列表中查找您的应用程序,您可能会发现如下一行:
MyApplication <23b...9af> 168389 168389 [per-process-limit] (frontmost) (resume)
如果你看到了,你的应用程序没有崩溃;它被操作系统杀死,因为它使用了太多的内存。这是开始使用 Instruments 来分析应用程序的内存使用情况并查找非常大的分配和/或内存泄漏的好时机。
iOS 应用程序无法隐藏或最小化,因此如果您正在使用您的应用程序并且突然进入列出所有应用程序的主屏幕,那么您的应用程序崩溃了。
如果您使用 Xcode 安装和测试您的应用程序,您可以转到 Organizer->devices 并选择您的设备并检查设备日志以查看您的应用程序崩溃时发生的情况。
当然,如果应用程序崩溃时控制台/调试区域上没有显示任何内容。
如果您没有在应用程序中使用 ARC,并且当应用程序崩溃时调试区域上没有显示任何内容,那么我敢打赌是内存不足的崩溃,这种崩溃通常不会让 Xcode 有时间记录错误,但您可以在设备日志上验证这一点。如果是这样,我建议在您的应用中切换并使用 ARC。