对象没有足够快地释放,导致应用程序重新启动崩溃

时间:2011-09-21 03:50:49

标签: iphone objective-c ios release

我有一个应用程序,我有5套动画,我存储在一个数组中。触摸按钮后,动画会被选中随机播放。这一切都很完美,但是当我退出应用程序并立即重新打开时,我发现了一个错误,我会看到我的主视图,然后它会跳转到我的第二个包含动画的视图。 (这不应该发生,因为你必须点击主视图才能在第二个视图中进行模态交换。如果我与它进行交互,一切都可以工作几秒钟,然后关闭时没有崩溃日志。

我终于意识到某些对象一定不能足够快地释放,因为如果我关闭应用程序并等待三秒钟,然后重新打开,一切都会正常运行。

我不想放下代码来展示,因为这更像是一个头脑风暴的问题。我喜欢任何能够指出正确方法的见解。我改变了很多代码以摆脱方便的方法,并定义了所有变量,然后在我的dealloc中发布。

有没有办法真正告诉应用程序杀死戒烟的一切?它没有设置为在后台运行所以这有点奇怪。感谢您的帮助,我还是新手并且学习!

3 个答案:

答案 0 :(得分:3)

好吧,在整个周末完成这项工作并进行更多研究比较我的应用程序的准系统版本与我的预发布版本后,我追踪到我正在使用的Flurry Analytics api的内存泄漏。显然我遇到的问题与这里的帖子相同:App hangs on restart with latest Flurry SDK and ios4。我通过将这些可选方法设置为false来解决此问题,因为它们在应用程序终止后需要额外的时间来发送数据,并且根据连接需要花费几秒钟。

FlurryAnalytics.h

/*
 optional session settings that can be changed after start session
 */
+ (void)setSessionReportsOnCloseEnabled:(BOOL)sendSessionReportsOnClose;    // default is YES
+ (void)setSessionReportsOnPauseEnabled:(BOOL)setSessionReportsOnPauseEnabled;  // default is YES

希望这可以帮助那些经历过与我类似的事情的其他人!

答案 1 :(得分:2)

默认情况下,所有应用都可以进入后台。通常情况下,他们不会在那里做任何事情,但是他们会处于冻结状态,当你再次打开它们时,你的程序不会重新启动,它只会从停止的地方开始。

任何设置为动画委托的内容都可能不会被释放,因为它会在动画完成之前保留用于此目的。

您可以向应用代理添加applicationDidEnterBackground:方法,以便在您的应用进入后台时获得通知,但您需要做的确切取决于应用的设计。您还可以添加applicationWillEnterForeground:来执行重新启动时需要执行的任何操作,而不是重新启动。

您可以通过开始持续时间为0.0的新动画来强制完成动画(如果由于某种原因你不能这样做,则可能非常短)。

答案 2 :(得分:2)

如果这种情况发生,只有当你的应用程序转到bkgnd然后回来时你不介意应用程序每次重新启动时都会重新启动,然后只需添加UIApplicationExitsOnSuspend in your app's plist。在我所有的情况下,这些和其他不好的事情发生在应用程序进入和返回bkgnd这有帮助。

虽然双击时它可能仍会在按钮上看到该应用,但它确实已停止并将重新启动。在buttom上显示的应用并不总是必须运行或存储在我学到的bkgnd中。

PS。不要忘记将UIApplicationExitsOnSuspend的值设置为YES