gpt4 book ai didi

ios - uitableview 中异步加载的图像在向上滚动时消失

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:29 25 4
gpt4 key购买 nike

我能够异步获取图像到 uitableview。我正在从 url 获取这些图像。在向上滚动 uitableview 时,这些图像消失,它们需要时间再次加载,有时它们根本不加载。我不想使用任何第 3 方库。我不想采用同步方法。请提出任何正确的方法来提高性能。提前感谢您的帮助。我的代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier=@"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"identifier"];
}
UIImageView *imgVw=[[UIImageView alloc]initWithFrame:CGRectMake(250, 10, 40, 30)];
[cell.contentView addSubview:imgVw];
Attributes *att = [listOfObjects objectAtIndex:indexPath.row];
strImgUrl=@"http:image url";
strImgName=att.classifiedImg;
if (strImgName == nil) {
UIImage *myImg=[UIImage imageNamed:@"user_circle.png"];
imgVw.image=myImg;
}
else{
strImg=[strImgUrl stringByAppendingString:strImgName];
}
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSData *data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:strImg]];
if ( data == nil )
return;
dispatch_async(dispatch_get_main_queue(), ^{

UIImage *img=[UIImage imageWithData: data];
imgVw.image=img;
});

});



return cell;
}

最佳答案

UITableView 旨在重用单元格。例如,当您向上滚动时,第一个单元格可能会被重新用于显示第 5 个单元格,因为第一个单元格现在不在屏幕上。当您向上滚动时,再次调用 cellForRowAtIndexPath,并且您将再次异步下载相同的图像。如果你想让它立即加载,你需要在第一次下载图像后缓存它们,这样下次需要该图像时你可以直接从缓存中提取它。

许多第三方库都这样做 (AFNetworking),但如果您不想使用它们,则必须手动缓存图像。

关于ios - uitableview 中异步加载的图像在向上滚动时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013058/

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