gpt4 book ai didi

iphone - NSCache 不起作用

转载 作者:行者123 更新时间:2023-11-28 18:25:29 24 4
gpt4 key购买 nike

我正在编写一个需要在缓存中存储一​​些图像的应用程序。我正在尝试使用 NSCache 来完成它,代码似乎很好,但不要将图像保存在缓存中。我有这段代码:

缓存是全局的,在.h中声明:NSCache *cache;

-(UIImage *)buscarEnCache:(UsersController *)auxiliarStruct{
UIImage *image;
[[cache alloc] init];

NSLog(@"cache: %i", [cache countLimit]);
if ([cache countLimit] > 0) { //if [cache countLimit]>0, it means that cache isn't empty and this is executed
if ([cache objectForKey:auxiliarStruct.thumb]){
image = [cache objectForKey:auxiliarStruct.thumb];
}else{ //IF isnt't cached, is saved
NSString *imageURLString = [NSString stringWithFormat:@"http://mydomain.com/%@",auxiliarStruct.thumb];
NSURL *imageURL = [NSURL URLWithString:imageURLString];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
image = [UIImage imageWithData:imageData];
[cache setObject:image forKey:auxiliarStruct.thumb];
}
}else{ //This if is executed when cache is empty. IS ALWAYS EXECUTED BECAUSE FIRST IF DOESN'T WORKS CORRECTLY
NSString *imageURLString = [NSString stringWithFormat:@"http://mydomain.com/%@",auxiliarStruct.thumb];
NSURL *imageURL = [NSURL URLWithString:imageURLString];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
image = [UIImage imageWithData:imageData];
[cache setObject:image forKey:auxiliarStruct.thumb];
}
return image;
}

这个函数在其他函数中被调用:

      UIImage *image = [self buscarEnCache:auxiliarStruct];

这是有效的,因为图像显示在屏幕上但没有保存在缓存中,我认为失败的行是:

[cache setObject:image forKey:auxiliarStruct.thumb];//auxiliarStruct.thumb是图片的名字

有人知道为什么缓存不起作用??谢谢!!

ps:抱歉我的英语不好,我知道

最佳答案

每次方法 buscarEnCache: 被调用时,都会创建一个新的缓存对象:

[[cache alloc] init];

因此旧缓存刚刚泄漏,不再可用。

cache = [[NSCache alloc] init]; 放在类的 init 方法中。


无需检查 countLimit。

-(UIImage *)buscarEnCache:(UsersController *)auxiliarStruct{
UIImage *image = [cache objectForKey:auxiliarStruct.thumb];

if (!image) {
NSString *imageURLString = [NSString stringWithFormat:@"http://mydomain.com/%@",auxiliarStruct.thumb];
NSURL *imageURL = [NSURL URLWithString:imageURLString];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
image = [UIImage imageWithData:imageData];
[cache setObject:image forKey:auxiliarStruct.thumb];
}

return image;
}

您可能希望将图像的提取放在在另一个线程中运行的方法中,并返回某种占位符图像。

关于iphone - NSCache 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com