如何在巨大的 CollectionView 中使用 SDWebImage 或 AFNetworking 在磁盘上缓存图像?
Posted
技术标签:
【中文标题】如何在巨大的 CollectionView 中使用 SDWebImage 或 AFNetworking 在磁盘上缓存图像?【英文标题】:How to cache images on disk with SDWebImage or AFNetworking in a huge CollectionView? 【发布时间】:2014-03-31 23:03:14 【问题描述】:我在我的应用程序中使用AFNetworking
来下载图像的de Url、代码和详细信息。我将所有这些NSStrings
存储在NSMutableArray
中的那些对象中的NSObject 中。我使用NSMutableArray
异步获取带有SDWebImage
的图像,但是在下载了一些图像后,我的应用程序崩溃了 Received memory warning
我尝试在AFNetworking
中使用相同的方法,但什么也没有发生。我对这两个库都使用了这种方法。
[self.pictureImg setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:kDefaultLoadingImage]];
我想知道如何cache
磁盘上的图像以及如何在需要时清理缓存。我不在乎你使用AFNetworking
还是SDWebImage
。我在我的自定义 cells
中使用该方法。
谢谢!
【问题讨论】:
【参考方案1】:只需使用这个FastImageChache 库。它可以根据需要在磁盘上缓存图像。
【讨论】:
【参考方案2】:当您“收到内存警告”时调用此方法
[SDWebImageManager.sharedManager.imageCache clearMemory];
【讨论】:
【参考方案3】:试试这个,
SDImageCache *imageCache = [SDImageCache sharedImageCache];
[imageCache clearMemory];
【讨论】:
【参考方案4】:对于这种方法,AFNetworking 自己处理缓存,除非你不忽略 NSURLRequest 的缓存属性
【讨论】:
【参考方案5】:[self.profileImage setImageWithURL:[NSURL URLWithString:urlString]
placeholderImage:[UIImage imageNamed:@"img_default"]
options:SDWebImageProgressiveDownload];
【讨论】:
【参考方案6】:试试这个!在 AFTNetworking 中为您的单元格使用 __weak
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLCache *cache = [[NSURLCache alloc] initWithMemoryCapacity:20 * 1024 * 1024 // 10MB. memory cache
diskCapacity:100 * 1024 * 1024 // 50MB. on disk cache
diskPath:nil];
sessionConfiguration.URLCache = cache;
sessionConfiguration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
在collectionView:cellForItemAtIndexPath:
__weak YOUR_CUSTOM_CELL *cell = (YOUR_CUSTOM_CELL *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
NSURLRequest *requestL = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", [your_model.url_image stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]];
[your_cell.your_image_view setImageWithURLRequest:requestL placeholderImage:[UIImage imageNamed:@"test"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
your_cell.your_image_view.image = image;
failure:nil];
希望对你有帮助!
【讨论】:
以上是关于如何在巨大的 CollectionView 中使用 SDWebImage 或 AFNetworking 在磁盘上缓存图像?的主要内容,如果未能解决你的问题,请参考以下文章
CollectionView [高分辨率] 图像上的 iOS 内存峰值
如何在 Ember.CollectionView 中使用模板
如何在 Swift 中使用宽度约束将 Xib 加载到 CollectionView?