我在应用程序中加载内容时遇到问题,我看到数据是由应用程序提取的,但图像需要花费大量时间才能加载,是否有可能加载后面的图像。代码如下:
NSDictionary *dict=[discussionArray objectAtIndex:indexPath.row];
UIImageView *avatarimage = (UIImageView *)[cell viewWithTag:4];
NSString *photoStrn=[dict objectForKey:@"photo"];
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSString *u=[NSString stringWithFormat:@"http://%@",photoStrn];
NSURL *imageURL=[NSURL URLWithString:u];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
dispatch_sync(dispatch_get_main_queue(), ^{
UIImage *dpImage = [UIImage imageWithData:imageData];
if (dpImage==nil)
{
dpImage = [UIImage imageNamed:@"profileImage.png"];
}
avatarimage.image = dpImage;
});
如果您需要更多详细信息,我将提供:)
答案 0 :(得分:4)
您可以使用GCD执行此操作:
dispatch_async(dispatch_get_global_queue(0,0), ^{
for (NSDictionary *dic in discussionArray)
{
NSString *photoStr=[dic objectForKey:@"photo"];
NSString * photoString=[NSString stringWithFormat:@"http://%@",photoStr];
UIImage *dpImage = [UIImage imageWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString:photoString]]];
if (dpImage==nil)
{
dpImage = [UIImage imageNamed:@"profileImage.png"];
}
}
});
答案 1 :(得分:0)
获取SDWebImage Here并将其添加到您的项目中并添加
的UIImageView + WebCache.h
在类实现文件
中UIImageView *imag=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
[imag setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",[[jsonarray objectAtIndex:indexPath.row]valueForKey:@"imgurl"]]] placeholderImage:[UIImage imageNamed:@"Icon@2x.png"]];
[self.view addSubview:imag];
[imag release];
SDWebImage对于从URL加载图像更有用。
希望这有助于!!!
答案 2 :(得分:0)
詹姆斯
有了这一行,
[NSData dataWithContentsOfURL:[NSURL URLWithString:photoString]]]
您在主线程上进行同步网络调用。网络呼叫完成后,当前线程将挂起。
解决方案是进行异步网络调用。 AFNetworking库提供了一个很好的类别来异步加载图像:UIImageView+AFNetworking。