gpt4 book ai didi

objective-c - NSTableView 加载大量图像时速度缓慢

转载 作者:行者123 更新时间:2023-12-03 17:02:04 25 4
gpt4 key购买 nike

有一个“基于 View ”的NSTableView,文本输入“URL”来输入图像URL和“添加按钮”。用 Objective-C 编码

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [self.items count];
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
Item *item = [self.items objectAtIndex:row];
NSString *identifier = [tableColumn identifier];

NSView *result = nil;

if ([identifier isEqualToString:@"thumb"]) {
NSImageView *thisCell = [tableView makeViewWithIdentifier:identifier owner:self];
NSString *url = [item valueForKey:@"url"];
NSImage *image = [[NSImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]];
[thisCell setImage:image];
result = thisCell;
} else {
NSString *value = [item valueForKey:identifier];
NSTableCellView *thisCell = [tableView makeViewWithIdentifier:identifier owner:self];
thisCell.textField.stringValue = value;
result = thisCell;
}

return result;
}

-(IBAction)add:(id)sender {
Item *testItem = [[Item alloc] init];
testItem.title = @"Some Title";
testItem.url = @"http://filmdash.files.wordpress.com/2010/02/sayhello_logo_300dpi_rgb.jpg";
[self.items addObject:testItem];
[self.tableView reloadData];
}

一切正常,您填写 URL,按添加按钮,包含 URL 和图像预览列的新行将添加到加载的表格 View 中。

正在从提供的 URL 同步加载图像。

当向 TableView 中添加大量行并且添加每个下一条记录时,就会出现问题。每次刷新 TableView 时,它都会再次从其 URL 加载所有图像。

是否有一种标准方法可以避免在每次 TableView 刷新时再次加载所有图像?

或者更好地避免在每次 TableView 刷新时再次加载所有图像并在第一次异步加载它们?

谢谢!

最佳答案

有多种方法可以做到这一点。

更简单的版本是仅重新加载 tableView 的新索引,而不是调用 reloadData。通过这样做,其他单元格保持不变。

另一个解决方案稍微复杂一些,但更好。创建图像字典。使用独特的东西作为 key 。我认为你的 item.identifier 可能有效。下载图像后,使用 key 将其保存到字典中。当单元格重新加载时,检查图像是否可用,否则下载它。我在这里看到了几个优点:

  1. 您有一本不错的字典,可以保存 (NSKeyedArchiver) 以供以后使用。
  2. 无需重新下载 - 不仅 reloadData 加载 cellView。如果单元格离开屏幕,它将被卸载并在可见时重新加载。这样您就可以再次平滑滚动。

题外话:我认为 NSURLConnection 会比 dataWithContentsOfURL: 工作得更好,因为它异步工作并且不会卡住 UI。照片可能会立即加载到您的计算机上,但使用缓慢的互联网连接会带来糟糕的用户体验,因为他们在几秒钟内无法使用您的应用程序。您还可以添加 NSProgressIndicator 来指示图像正在加载

关于objective-c - NSTableView 加载大量图像时速度缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359704/

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