gpt4 book ai didi

ios - 如何检查是否设置了 NSCache 实例值

转载 作者:行者123 更新时间:2023-11-29 02:41:17 25 4
gpt4 key购买 nike

我有一个 NSCache 的实例,例如:NSCache *imageCache; 它基本上用于保存一些具有不同 "@keys 的远程“图像”值“。我在开头的全局类中 alloc & init NSCache 并设置了一个 if else 条件,如下所示:

if (self.imageCache == nil)
{
self.imageCache = [[NSCache alloc] init];
}
else
{
NSLog(@"cache set");
}

#import所有ViewControllers中的“全局类”,这样我就不必每次都解析图像。但问题是当我转到其他 ViewControllers 时,似乎每次都是 NSCache alloc & init。因为加载图像所需的时间与 1stVC 相同。我认为 if else 条件不能完美工作,或者它不是检查 NSCache 设置与否的适当方法。谁能告诉我它有什么问题吗?更重要的是,imageCache 是从全局变量中使用的。
提前致谢。
祝你有美好的一天。

添加:

这是我将 UIScrollView 中的 UIButtons 加载为 subView 的方法。这是一个 UIViewClass ,我将其作为 subView 添加到我的“EveryViewController”中,只需查看 if (cachedImage) 行即可。它工作正常。但是当我想检查 NSCache (iADImageCache) 是否设置时,它显示它尚未设置。但应该设置哪个。在这种情况下,我如何检查所有多个 iADImageCache 及其不同的 @"Key" 名称?再次感谢。

-(void) loadUIButton
{
[self loadScrollView];
for (int i = 0; i < [iADDisplayArray count]; i++)
{
adButtonOutLet = [[UIButton alloc] initWithFrame:CGRectMake(i*320, 0, ButtonWidth, ButtonHight)];

currentAd = [iADDisplayArray objectAtIndex:i];

NSString *path = currentAd.bannerIconURL;
NSURL *url = [NSURL URLWithString:path];
NSMutableURLRequest *requestWithBodyParams = [NSMutableURLRequest requestWithURL:url];
NSData *imageData = [NSURLConnection sendSynchronousRequest:requestWithBodyParams returningResponse:nil error:nil];
UIImage *originalImage = [UIImage imageWithData:imageData];

UIImage *cachedImage = [self.iADImageCache objectForKey:currentAd.bannerIconURL];
if (cachedImage)
{
[adButtonOutLet setImage:cachedImage forState:UIControlStateNormal];
//NSLog(@"OnecachedImage %@", cachedImage);
}
else
{
[self.iADImageCache setObject:originalImage forKey:currentAd.bannerIconURL];
[adButtonOutLet setImage:originalImage forState:UIControlStateNormal];
NSLog(@"OneimageCache %@", self.iADImageCache);
}

adButtonOutLet.userInteractionEnabled= YES;
[adButtonOutLet setTag:i];
[adButtonOutLet addTarget:self action:@selector(goToURL:) forControlEvents:UIControlEventTouchUpInside];

[self.iADScrollView addSubview:adButtonOutLet];
}
}

最佳答案

你可以创建一个单例类,应用程序的实例完成启动并通过所有 View Controller 在任何地方使用它。在单例类中放一个属性

@property(nonatomic,strong) NSCache* imageCache;

然后在单例类 init 方法中仅实例化一次。这样您就不必关心它,您只需将图像添加到该缓存即可。当然,您必须根据缓存中是否存在 key 来检查图像是否被缓存。

NSCache* globalCache = [SingletonClass sharedInstanceMethod].imageCache;
UIImage *imageX = [globalCache objectForKey: @"keyX"];
if (!imageX) {
// download your image
imageX = <Download method>;
[globalCache setObject: imageX forKey: @"keyX"];
}

// Do your stuff (like showing the image)
....
...
..
.

希望对你有帮助

关于ios - 如何检查是否设置了 NSCache 实例值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25762129/

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