如何优化从URL中加载图像以进行uicollectionview?

时间:2013-08-28 04:07:18

标签: iphone ios objective-c uicollectionview

我不知道uicollection视图总是调用方法(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

当你移动单元格时,我的程序总是调用从url加载图像。让它变慢。

3 个答案:

答案 0 :(得分:4)

您可以将SDWebImage用于缓存支持。您无需下载之前已经提取过的图像。

访问https://github.com/rs/SDWebImage并使用它。

答案 1 :(得分:1)

来自Apple的Documentation ...

– dequeueReusableCellWithReuseIdentifier:forIndexPath:

当系统要求为集合视图提供新单元格时,请从数据源对象中调用此方法。如果现有单元格可用,则此方法会出现,或者根据先前注册的类或nib文件创建新单元格。

重要:在调用此方法之前,必须使用registerClass:forCellWithReuseIdentifier:或registerNib:forCellWithReuseIdentifier:方法注册类或nib文件。

编辑:我假设您正在异步加载图片,如果没有,请使用以下代码。

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
  UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:
  [NSURL URLWithString:@"ur image url"]]]];
  dispatch_sync(dispatch_get_main_queue(), ^{
     [[cell imageView] setImage:image];
     [cell setNeedsLayout];
  });
  });

编辑2 :atomk的建议(以下评论)是有道理的,所以我不会在这里发布代码。在替换中你可以使用名为SDWebImage的库。你可以加载根据代码的作者,您想要的图像数量不会多次下载。

答案 2 :(得分:1)

使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:加载图像,然后使用NSCache防止反复下载相同的图像。在这里查看示例,您甚至可能希望包含此AFNetworking库并使用它: https://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking/UIImageView%2BAFNetworking.m