在iOS中从Facebook更快地获取图像

时间:2013-10-03 17:38:02

标签: ios xcode facebook nsdata

嗨,我正在尝试从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);
    }
}

1 个答案:

答案 0 :(得分:0)

永远不要在iOS应用中使用 _ _withContentsOfURL。正如您所看到的,它阻止了它运行的线程,使您的应用程序显得生涩或无响应。如果你真的很幸运,如果其中一项操作耗时太长,iOS看门狗计时器将会终止您的应用程序。

您必须使用异步网络操作。

Apple有一个示例应用程序正是这样做的: https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html