gpt4 book ai didi

iphone - 代码 : lazy loading images from image data in core data

转载 作者:行者123 更新时间:2023-11-29 13:31:11 26 4
gpt4 key购买 nike

注意:我正在使用 ARC

我有一个懒惰的图像加载技术,在从 web url 加载图像时效果很好。但是,我在从核心数据加载图像时遇到问题。这是我正在使用的方法:

我首先分配初始化我的可变数组,从核心数据加载我的数据,然后将它存储在一个数组中。然后我有这段代码:

NSOperationQueue *queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self
selector:@selector(loadImage)
object:nil];
[queue addOperation:operation];

然后……

- (void)loadImage {
for (int i = 0; i < [myArrayFromCoreData count]; i++) {
AnObject *myObject = [myArrayFromCoreData objectAtIndex:i];
UIImage* image;
if ([myObject.image length] == 0) {
image = [UIImage imageNamed:@"default.png"];
}
else {
image = [[UIImage alloc] initWithData:myObject.image];
}
[self performSelectorOnMainThread:@selector(displayImage:) withObject:[NSArray arrayWithObjects:image,myObject.myObjectId, nil] waitUntilDone:NO];
}
}

- (void)displayImage:(NSArray*)array {
[loadedImages setObject:[array objectAtIndex:0] forKey:[array objectAtIndex:1]];
[self.myTable reloadData];
}

到这里没有延迟,NSLog 显示我的所有图像都已添加到 myObjectLoadedImages 数组。

我遇到的问题是滚动表格 View 时出现延迟,有时会导致崩溃。这是我用来显示加载图像的代码:

UIImage* image = [loadedImages objectForKey:myObject.myObjectId];
if (image != NULL) {
myImageView.image = image;
}
else {
myImageView.image = [UIImage imageNamed:@"default.png"];
}

这是在 cellForRowAtIndexPath 方法中,因此每次显示单元格时都会调用它。我在这里做错了什么,因为我的代码改编自一个可以很好地从 web url 加载图像的类。

最佳答案

首先想到的是 - 你没有缓存你的 UIImages,所以它们不是从内存中加载的。

你试过了吗https://github.com/nicklockwood/AsyncImageView/ ?在我看来,它是将异步图像从文档和 Web 加载到任何 View 的最佳库。它支持缓存、进度 View 和许多简化 Controller 代码的东西。

关于iphone - 代码 : lazy loading images from image data in core data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11854754/

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