我不知道uicollection视图总是调用方法(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
当你移动单元格时,我的程序总是调用从url加载图像。让它变慢。
答案 0 :(得分:4)
您可以将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