对象释放速度不够快,导致应用重新启动时崩溃



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

我终于意识到有些对象释放得不够快,因为如果我关闭应用程序并等待三秒钟,然后重新打开,一切都执行得很好。

我不想写代码来展示,因为这更像是一个头脑风暴的问题。我希望你能给我指出正确的方向。我修改了很多代码来摆脱方便的方法,并定义了所有变量,然后在dealloc中释放。

是否有一种方法可以真正告诉应用程序在退出时杀死所有东西?它没有设置为在后台运行,这有点奇怪。谢谢你的帮助,我仍然是新的和学习!

好吧,在整个周末都在做这件事,并做了更多的研究,比较了我的应用的基本版本和预发布版本,我跟踪内存泄漏到我正在使用的Flurry Analytics api。显然我也遇到了同样的问题:使用最新的Flurry SDK和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

希望这能帮助到任何和我有类似经历的人!

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

任何被设置为动画委托的东西都可能不会被释放,因为它会一直保留到动画完成。

你可以在你的应用程序委托中添加一个applicationDidEnterBackground:方法,以便在你的应用程序进入后台时得到通知,但确切地说,你需要做什么取决于你的应用程序的设计。你也可以添加applicationWillEnterForeground:来做任何你需要在重新启动时做不同的事情,而不是新启动。

你可以通过开始一个持续时间为0.0的新动画来强制你的动画完成(或者非常短,如果你不能这样做的话)。

如果这种情况只发生在你的应用程序去bkgnd和回来,你不介意如果应用程序每次重新启动它回来,那么就把UIApplicationExitsOnSuspend in your app's plist。在我所有的情况下,这些和其他糟糕的事情发生在应用程序去和从bkgnd返回时,这有帮助。

当双击时,你可能仍然会在按钮上看到应用程序,它实际上已经停止并将重新启动。显示在底部的应用程序并不总是必须运行或存储在我学到的bkgnd中。

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

最新更新