Ada*_*vis 5 iphone objective-c ios4 ios
我发现我可以通过执行以下操作来破坏我的iOS应用:
至今:
我很快就这样做了,所以我很好奇,如果它可能是我的应用程序中的一个错误(以及该错误可能是什么),或者如果我正在重启它,跳板正在杀死我的应用程序?
调试器报告我的应用程序收到"SIGKILL"信号,所以我倾向于认为这实际上是在实际杀死进程的延迟,但我不想忽视我可能犯的错误.
鉴于我不能在调试器之外重复它,它对我来说是低优先级,但我仍然希望更好地理解它,特别是如果它指向我的应用程序中的错误.
当您终止应用程序时,操作系统会向其发送 SIGKILL。通常这会杀死你的应用程序,但由于附加了一个调试器,应用程序被挂起,而不是让你有机会调试信号的原因(SIGKILL 可能应该有一个例外,但这不是一个大问题'语气)。
当您再次启动它时,SpringBoard(主屏幕)会注意到该应用程序并未死亡并切换到它。[1] 此时,由于应用程序已挂起,因此无法执行任何操作。我认为SpringBoard 通过发送 SIGKILL 并等待应用程序终止来处理无响应的应用程序,但 GDB 仍然连接,您的应用程序仍然挂起,并且什么也没有发生。
此时,我通常会单击 Xcode 的停止按钮,或者如果这不起作用(因为 Xcode 4 是一个有缺陷的 POC),请拔下手机插头。
如果您想知道为什么 SpringBoard 不简单地忽略应用程序的旧实例并生成一个新实例:只能有一个实例在运行。应用程序始终做出这种假设(例如,您的应用程序没有另一个实例访问其数据库),并且我很确定 Mach 端口/引导命名空间/某些内容意味着如果有另一个应用程序,您的应用程序将无法启动复制正在运行(或者如果系统的一部分认为您的应用程序仍在运行,因为某些操作未能进行清理)。
在较旧的操作系统版本上,如果您的应用程序在退出时花费大量时间执行某些操作(例如保存),则退出并快速“重新启动”应用程序将切换到正在退出的应用程序,并且应用程序将完成退出,主屏幕将突然出现。我忘记了在哪个操作系统版本中看到过这个问题,但我认为它已经修复了。
| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |