gpt4 book ai didi

iphone - Objective C 线程,在 iOS tableViewCell 中设置图像

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

我刚刚开始使用线程,我正在尝试通过我的应用程序中的 TableView 获得更好的性能。每个 tableViewCell 都有一个 imageView,并且在创建 tableViewCell 时从磁盘加载图像。我想在不同的线程上加载图像,然后在主线程上设置 UIImageView。我的问题是,在另一个线程上运行的方法可以向主线程返回一个值吗?有更好的方法吗?

提前感谢您的帮助。

最佳答案

可能是这样的,假设你的图标在文档的目录中:

#define DOCUMENTS_DIRECTORY [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]

//inside - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:indexPath, @"indexPath", @"image1.png", @"imageName", nil];
[NSThread detachNewThreadSelector:@selector(loadIcon:) toTarget:self withObject:d];
//

- (void)iconLoaded:(NSDictionary*)dict {
[icons replaceObjectAtIndex:[[dict objectForKey:@"index"] intValue] withObject:[UIImage imageWithData:[dict objectForKey:@"imageData"]]];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[dict objectForKey:@"indexPath"]]];
}
- (void)loadIcon:(NSDictionary*)dict {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSString *filePath = [DOCUMENTS_DIRECTORY stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg", [dict objectForKey:@"imageName"]]];
NSData *imageData = [NSData dataWithContentsOfFile:filePath];
[self performSelectorOnMainThread:@selector(iconLoaded:) withObject:[NSDictionary dictionaryWithObjectsAndKeys:[dict objectForKey:@"indexPath"], "indexPath", imageData, @"imageData", nil] waitUntilDone:YES];


[pool drain];
}

您将需要跟踪您正在为哪些单元格加载图像,因此您不要在它已经加载时尝试加载它。可能会有一些小的语法错误,因为我没有编译它,只是徒手写的。

icons 是一个 NSMutableArray 为每个单元格保存一个 UIImage

关于iphone - Objective C 线程,在 iOS tableViewCell 中设置图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5419331/

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