1

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

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

4

3 回答 3

4

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

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

于 2013-08-28T04:50:52.127 回答
1

使用加载图像[NSURLConnection sendAsynchronousRequest:queue:completionHandler:然后使用 NSCache 以防止一遍又一遍地下载相同的图像。看这里的例子,你甚至可能想要包含这个 AFNetworking 库并使用它: https ://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking/UIImageView%2BAFNetworking.m

于 2013-08-28T04:40:20.307 回答
1

从苹果的文档...

– 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的库。您可以加载任意数量的图像,并且不会下载相同的 URL根据代码的作者多次。

于 2013-08-28T04:23:30.620 回答