注意:我正在使用 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 数组中。
我遇到的问题是滚动表格视图时存在延迟,有时会导致崩溃。这是我用来显示加载图像的代码:
UIImage* image = [loadedImages objectForKey:myObject.myObjectId];
if (image != NULL) {
myImageView.image = image;
}
else {
myImageView.image = [UIImage imageNamed:@"default.png"];
}
这是在cellForRowAtIndexPath
方法中,因此每次显示单元格时都会调用它。我在这里做错了什么,因为我的代码改编自一个可以正常工作的类,可以从 web url 加载图像。