我不知道 uicollection 视图总是调用方法(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
当您移动单元格时,我的程序总是调用从 url 加载图像。让它变慢。
我不知道 uicollection 视图总是调用方法(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
当您移动单元格时,我的程序总是调用从 url 加载图像。让它变慢。
您可以通过缓存支持将 SDWebImage 用于您的目的。您无需下载之前已获取的图像。
只需访问https://github.com/rs/SDWebImage并使用它。
使用加载图像[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
然后使用 NSCache 以防止一遍又一遍地下载相同的图像。看这里的例子,你甚至可能想要包含这个 AFNetworking 库并使用它:
https ://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking/UIImageView%2BAFNetworking.m
从苹果的文档...
– 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根据代码的作者多次。