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

Posted

技术标签:

【中文标题】在 iOS 中更快地从 facebook 获取图像【英文标题】:Make fetching of images faster from facebook in iOS 【发布时间】:2013-10-03 17:38:01 【问题描述】:

嗨,我正在尝试从 facebook 获取用户的朋友个人资料图片并将其加载到我的表格中,它工作正常,但是根据您拥有的朋友数量,这需要很长时间我注意到在我的 fetchPeopleimages 函数中, [NSData dataWithContentsOfURL:imageURL] 的一部分正在延迟。 我已经通过 *** 进行了搜索,看来我可能必须实现 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】:

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

对于这样的事情,您必须使用异步网络操作。

Apple 有一个示例应用程序可以做到这一点: https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html

【讨论】:

以上是关于在 iOS 中更快地从 facebook 获取图像的主要内容,如果未能解决你的问题,请参考以下文章

如何优化限制查询以更快地从大表中访问数据?

如何真正快速地从大 Bufferedimage 中获取小图像

如何获取带有图像和视频以及文本的 facebook 提要?

从 Facebook Graph-API 获取用户图像

如何在 iOS 中从 Evernote 笔记中获取文本

如何在 selenium 中更快地从动态网站读取数据