当我们关闭应用程序时,我们如何清除缓存的图像?

时间:2009-12-09 11:34:50

标签: iphone caching uiimage

我使用以下代码将图像缓存到我的应用程序的文档目录中。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *saveDirectory = [paths objectAtIndex:0];

但即使关闭应用程序后,它仍然存在。当我丢失应用程序时,如何清除它。我正在模拟器中做这一切。

4 个答案:

答案 0 :(得分:4)

我会在我的应用程序委托中实现applicationWillTerminate:并删除那里的缓存文件。或者更好的是,正如弗拉基米尔所建议的那样,将它们保存在一个临时目录中,让操作系统在需要时清理它们。

- (void)applicationWillTerminate:(UIApplication *)app
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *cacheFiles = [fileManager contentsOfDirectoryAtPath:saveDirectory error:error];
    for (NSString *file in cacheFiles) {
        error = nil;
        [fileManager removeItemAtPath:[saveDirectory stringByAppendingPathComponent:file] error:error];
        /* handle error */
    }
}

答案 1 :(得分:2)

如果您不希望在关闭应用程序后保留缓存的图像,请将它们保存到临时目录 - 它们将自动删除。

如果要手动删除文件,则必须存储它们的路径并使用以下NSFileManager函数:

- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error

编辑:抱歉,我在这里似乎错了自动删除。以下是开发指南的引用:
使用此目录编写临时文件,在应用程序启动之间不需要保留这些文件。当您确定不再需要文件时,您的应用程序应从该目录中删除文件。 (当您的应用程序未运行时,系统也可能从该目录中清除延迟文件。)

答案 2 :(得分:1)

NSString *file;
NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:saveDirectory];
NSError* err;
while (file = [dirEnum nextObject]) {
    err = nil;
    [[NSFileManager defaultManager] removeItemAtPath:[saveDirectory stringByAppendingPathComponent:file] error:&err]];
    if(err){
        //print some errror message
    }
}

答案 3 :(得分:1)

使用此问题中指定的临时目录路径:

How can I get a writable path on the iPhone?