从Xcode和设备重新启动应用程序有什么区别

时间:2014-02-19 14:57:41

标签: ios objective-c xcode ipad

终止后,我的iPad应用程序出现问题。 我将我的应用程序加载到设备抛出Xcode,并完成执行。 当我从Xcode重启此应用程序(单击运行按钮)时,一切正常。 但是,如果我尝试从移动设备运行应用程序(单击应用程序ico),我的结果很糟糕(某些数据文件变得不一致)。

如果我在应用程序终止后将所有文件从应用程序保存到Mac,然后尝试通过这两种方式在相同的数据文件中启动应用程序......这个问题也出现了......

这两种运行应用程序的方式有什么不同(来自Xcode和设备)? 在第一和第二种情况下调用了哪些不同的函数? 谢谢你的帮助...

3 个答案:

答案 0 :(得分:0)

它们的发布方式没有区别,或者......也许。你知道,iOS中的应用并没有真正被用户终止。

当您从XCode启动应用程序时,它会终止所有正在运行的实例并重新启动它。

当您从设备启动应用程序时,它只是在状态下打开应用程序,如果您最后一次使用该应用程序(除非因内存或资源原因而被杀死)

答案 1 :(得分:0)

我已经解决了这个问题!

问题出在iOs应用程序的生命周期中。 如果需要超过5-10秒(来源:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

,iOS系统会中断应用启动

但是!如果我们运行抛出XCode,这个中断不会出现......

可能有两种解决方案 1.在启动时使用dispatch_async进行硬任务(对我没用,因为必须先执行启动任务) 2.启动后启动所有硬任务(可能是在点击按钮后或在控制器加载中) - 我已经使用了这个解决方案,一切都变好了!

答案 2 :(得分:-1)

如果您在应用程序位于前台时使用Xcode终止该应用程序,您最终可能会遇到不一致且尚未保存的内容。但是如果您先将应用程序置于背景中并等待一段时间(如10秒钟)然后从Xcode中删除该应用程序,它应该与后台基本相同,然后在设备上终止该应用程序。您的应用程序中的某些内容可能会在您设置应用程序时保存/同步,如果您在应用程序位于前台时从Xcode中删除它,则不会发生这种情况。

编辑:

确保在编写数据文件时,您还要原子地执行此操作。这将防止文件仅被部分写入,因为它将首先将其写入临时文件,然后在写入文件后将其移动到位。如果你的应用程序在写这篇文章中途被杀,那么如果文件没有被原子化写,那么这可能会破坏文件。