嗨,我正在尝试从Facebook上获取用户的朋友个人资料图片并将其加载到我的桌子中并且工作正常,但是根据您拥有的朋友数量需要很长时间我注意到了在我的fetchPeopleimages函数中, [NSData dataWithContentsOfURL:imageURL]的部分正在进行延迟。我搜索了stackoverflow,似乎我可能需要实现 NSURLConnection sendAsynchronousRequest 方法或缓存。但是没有正确的例子。有人可以提供解决方案吗?如果我必须实现这些方法,请举例说明如何在我的代码中实现它。
-(void) fetchPeopleimages
{
if ([listType isEqualToString:@"Facebook"])
{
int count=0;
NSMutableArray *imageArray=[[NSMutableArray alloc]initWithCapacity:[_peopleImageList count]];
for(NSString *imageUrl in _peopleImageList)
{
NSData *imageData = nil;
NSString *imageURLString = imageUrl;
count++;
NSLog(@"URL->%@,count->%d", imageURLString,count);
if (imageURLString)
{ //This block takes time to complete
NSURL *imageURL = [NSURL URLWithString:imageURLString];
imageData = [NSData dataWithContentsOfURL:imageURL];
}
if (imageData)
{
[imageArray addObject:imageData];
}
else
{
[imageArray addObject:[NSNull null]];
}
}
_peopleImageList=imageArray;
NSLog(@"%@",_peopleImageList);
}
}
答案 0 :(得分:0)
永远不要在iOS应用中使用 _ _withContentsOfURL。正如您所看到的,它阻止了它运行的线程,使您的应用程序显得生涩或无响应。如果你真的很幸运,如果其中一项操作耗时太长,iOS看门狗计时器将会终止您的应用程序。
您必须使用异步网络操作。
Apple有一个示例应用程序正是这样做的: https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html