我有一个UITableView动态显示获取的RSS,我现在已经自定义RSS以返回图像名称,以便我以后可以将UIImageView添加到表格中的每个单元格,在每个单元格旁边显示图像,这里是添加图像的代码
UIImageView *imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(0, 0, 40, 40);
NSString *path = [NSString stringWithFormat:@"URL/%@",object.imageName]; //"object" is the returned Object from the RSS, so basically what i am doing is appending the image name to the path url.
NSURL *url = [NSURL URLWithString:path];
NSData *data = [NSData dataWithContentsOfURL:url];
imageView.image = [UIImage imageWithData:data];
[cell addSubview:imageView];
[cell bringSubviewToFront:imageView];
因此,当我运行我的应用程序时,应用程序运行缓慢,甚至停止了一小段时间,原因是我正在加载所有直接在此行中成像的RSS NSData *data = [NSData dataWithContentsOfURL:url];
解决这个问题的任何方法?
提前谢谢
我实际上想过在一个单独的线程中获取图像,
dispatch_queue_t fetchImage = dispatch_queue_create("Fetching Image", NULL);
dispatch_async(fetchImage, ^{
NSData *data = [NSData dataWithContentsOfURL:url];
});
dispatch_release(fetchImage);
但这样做不允许我在队列外使用变量“data”。 任何想法?
答案 0 :(得分:3)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *path = [NSString stringWithFormat:@"URL/%@",object.imageName];
NSURL *url = [NSURL URLWithString:path];
NSData *data = [NSData dataWithContentsOfURL:url];
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = [UIImage imageWithData:data];
}); });
答案 1 :(得分:0)
答案 2 :(得分:0)
方法[NSData dataWithContentsOfURL:]
是同步的:每当你调用它时,只要完成它就会阻塞当前线程(几乎可以肯定是你应用程序的主线程)。这非常糟糕。除了让用户界觉感到笨拙之外,还有一个看门狗进程可以杀死无响应的应用程序。
你真的,真的想使用异步网络调用。阅读NSURLConnection
,但也知道,在这个确切的主题上有很多文章和库以及样本:异步加载图像以便在表格视图中显示。可能是UIImageView
上的AFNetworking类别,或者像SDWebImage这样的库。