我面临一个奇怪的问题。我的iPhone应用程序受密码保护,只有在输入正确的密码后,用户才能再次登录。该应用程序还有多个屏幕。
假设我在特定的屏幕上(登录后)并关闭设备(应用程序仍在运行),打开设备并启动我的应用程序,它从屏幕开始返回,当设备显示时重新启动。密码屏幕未显示,似乎从未调用applicationDidFinishLaunching。当我从后台杀死应用程序并再次启动它时,它正常工作。
当设备重启时,应用程序是否会丢失内存中的所有数据?难道不会再次提出意见吗?在这种情况下,应用程序的确如何表现。
修改 我做了TriPhoenix的建议。我观察到的是,如果您很快打开设备并启动应用程序,则不会调用applicationDidBecomeActive委托方法。但是如果你在发布之前给它一些时间,一切似乎都按预期工作。是不是应该在每个应用程序启动时调用applicationDidBecomeActive方法?
我正在测试的内容: 操作系统:iOS 5.0.1 Xcode:4.2.1 设备:iPhone 4s
答案 0 :(得分:2)
您的应用在内存使用方面是否可能非常小?我记得有一个WWDC演讲(现在不能找到合适的演讲),据说在内存使用方面非常小的应用程序(限制未公开定义,但我认为它大约是16 MiB内存使用量)并没有被杀死低内存条件,但暂停到手机的闪存,以便以后唤醒。我不确定这是否能够在完全停机后存活,但它肯定是为数不多的可能性之一。要检查这一点,您可以尝试通过创建一些大型对象/数组来人为地增加内存使用量,并查看问题是否消失。
在任何情况下,可能有更好的功能来重新激活密码保护,例如applicationWillEnterForeground:
或applicationDidBecomeActive:
,因为这应涵盖用户可能返回您应用的所有可能性。