在后台运行时管理应用程序中的内存 - 正确的程序?

时间:2011-12-12 17:42:07

标签: iphone objective-c xcode memory-management sdk

我刚刚阅读了这篇关于发送给在后台运行的应用的通知的帖子:

Not getting didReceiveMemoryWarning when app is in the background

我的问题是,由于后台的应用程序在再次进入前台之前不会对didRecieveMemoryWarning执行操作,如果内存通知是在后台运行时,建议在应用程序中释放内存的方法是什么?发送 - 或者这不可能吗?

2 个答案:

答案 0 :(得分:3)

在iOS 4.0及更高版本中,当用户退出支持后台执行的应用程序时,将调用- (void)applicationDidEnterBackground:(UIApplication *)application方法而不是applicationWillTerminate:方法。

您应该使用此方法释放共享资源,保存用户数据,使计时器无效,并存储足够的应用程序状态信息,以便将应用程序恢复到当前状态,以防以后终止。

您还应该禁用应用程序用户界面的更新,并避免使用某些类型的共享系统资源(例如用户的联系人数据库)。您还必须避免在后台使用OpenGL ES。

您执行此方法大约需要五秒钟才能执行任何任务并返回。如果您需要额外的时间来执行任何最终任务,可以通过调用beginBackgroundTaskWithExpirationHandler:从系统请求额外的执行时间。在实践中,您应该尽快从applicationDidEnterBackground:返回。如果方法在时间用完之前没有返回,则应用程序将终止并从内存中清除。

答案 1 :(得分:2)

如果您的应用在后台正在运行(因为它是,例如,允许在后台运行的IP语音应用),它将在同一时间内收到内存警告通知就像它在前台运行一样,你应该相应地处理它们。

但是,如果您的应用在后台暂停,它将不会收到内存警告或其他通知。你的工作是在你的应用程序进入后台之前释放尽可能多的内存。一旦你在后台,你就再也无法做任何事了。操作系统将自行决定是否终止你的应用程序(不再通知你)。