0

我正在使用自定义 UITableViewCell 实现 UITableView。那里有 UIImageView 用于显示一些图像。但是我得到的 api 不包含我必须在每个 UITableViewCell 中显示的图像的下载链接。为了获取图像,我需要调用另一个 GET 请求,该请求返回要在相应单元格上显示的图像的字节数组流。

我知道,我可以从来自 api 的 NSData 制作图像。但我不确定这会有多有效的想法,我担心内存和性能问题。而且我想在 UITableViewCell 和图像缓存中进行异步加载,以便在以后的调用中花费更少的时间。那么,这里有什么有效的方法呢?还有一些关于任何可以帮助我做到这一点的好图书馆的建议都会很棒。

4

2 回答 2

0

这就是我解决它的方法。我还没有使用缓存,但这足以在 UITableViewCell 中正确显示它们。这是我使用的方法。

+ (void)downloadImageWithURL:(NSMutableURLRequest *)request completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
{
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

                               NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
                               int statusCode = httpResponse.statusCode ;
                               NSLog(@"Status Code Imageloading : %d" , statusCode);

                               if(statusCode == 200){
                                   UIImage *image = [[UIImage alloc] initWithData:data];
                                   NSLog(@"Success");
                                   completionBlock(YES,image);
                               } else {
                                   NSLog(@"Failure");
                                   completionBlock(NO,nil);
                               }
    }];
}
于 2013-08-29T03:55:58.163 回答
0

您将需要自己下载图像,可能在您的表格视图控制器或模型中。为了节省内存空间,您可以调整图像的大小。理想情况下,这将在服务器端完成以节省带宽。但是,您也可以在下载后调整它的大小。请记住,视网膜和非视网膜设备将有不同的图像大小调整需求。

无论哪种方式,将调整大小的图像与其他单元格数据一起缓存并丢弃 NSData。然后,您可以通过调用reloadRowsAtIndexPaths:withRowAnimation:UITableview 来刷新单元格。

如果您有大量包含图像的行,您可以将图像写入磁盘并释放内存。不过,一般来说,最好避免敲击磁盘来加载单元格数据,以保持表格滚动顺畅。为了保持性能,您可以根据表格滚动位置预测需要哪些图像并智能地加载转储图像。您需要在单独的线程上进行加载,以免影响滚动性能。

于 2013-07-26T06:35:30.390 回答