当应用程序进入后台模式时,释放图形。

3

在苹果文档中,你可以找到苹果建议在你的应用程序进入后台模式时释放重量级数据,例如图片。
如何从UIViews和其他数据中释放图片?
如何以正确的方式从所有viewController中释放UIViews中的图片?
当应用程序接收到applicationWillResignActive消息时,如何恢复数据?

如果有人有好的示例或链接,请展示出来。


4
为什么有这么多踩?好吧,这是一个模糊的问题,但实际上是个好问题。如果能得到一个好的答案(对新手有用),那将会非常不错。 - Rok Jarc
1个回答

1

在应用程序委托中添加两个方法

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_APP_BACKGROUND object:nil];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_APP_BACKGROUND object:nil];
}

创建一个 BaseViewController 类,并添加以下方法:
- (id)init
{
    self = [super init];
    if (self) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillForeground) name:NOTIFICATION_APP_FOREGROUND object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBackground) name:NOTIFICATION_APP_BACKGROUND object:nil];
    }

    return self;
}


- (void)appDidBackground {
}

- (void)appWillForeground {

}
- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

让所有的视图控制器都从BaseViewController继承。在appDidBackground方法中,您应该释放不需要的数据,在appWillForeground方法中-恢复它


  1. 有人告诉我,如果使用 [UIImage imagenamed:@"image.png"] - 这将不会释放图像内存。
  2. 如何保存和恢复数据。使用 NSUserDefaults 吗?如果使用 CoreData,这很容易。但是例如如何保存 NSArray,我可以将其保存到NSUserDefaults或plist文件中。什么是正确的方法?
- rowwingman
  1. [UIImage imageNamed]会缓存所有图片。在内存警告时可能会被释放。
  2. 如果要保存大量数据,应该使用CoreData;如果只有少量数据,则NSUserDefaults是一个不错的选择。如果想要在NSUserDefaults中保存一个包含自定义对象的数组,则应该为其中每个自定义类实现NSCoding协议。
- NeverBe
如何释放使用loadView添加的UIView。有些人说需要使用viewDidUnload,但是当应用程序进入后台模式时,此方法不会被调用。 - rowwingman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接