https://github.com/DYS12345/SDWebImage-/tree/dev
075e91eca8abaf866d9adc628acb3f3637c3e9d5
这一次更新重点是将readme文件进行了调整,里面关于LRU的算法,可以看一下,也是收到内存警告的时候,如何去清理内存。
https://github.com/DYS12345/SDWebImage-/tree/dev
0ccc5b5bd2300a0e8f8b60038f1e7da38ac4b466
接下来的一次修改提交,修改了三个地方:
DMWebImageDownloader.m文件:
- 把图像存储部分去掉了;
- 将下载队列的名称进行了更改;
#import "BJCAWebImageDownloader.h"
#import <UIKit/UIKit.h>
static NSOperationQueue *downloadQueue;
@implementation BJCAWebImageDownloader
@synthesize url, target, action;
+(id)downloaderWithURL:(NSURL *)url target:(id)target action:(SEL)action
{
BJCAWebImageDownloader *downloader = [[BJCAWebImageDownloader alloc] init];
downloader.url = url;
downloader.target = target;
downloader.action = action;
if (downloadQueue == nil)
{
downloadQueue = [[NSOperationQueue alloc] init];
downloadQueue.maxConcurrentOperationCount = 8;
}
[downloadQueue addOperation:downloader];
return downloader;
}
+(void)setMaxConcurrentDownloads:(NSUInteger)max
{
if (downloadQueue == nil)
{
downloadQueue = [[NSOperationQueue alloc] init];
}
downloadQueue.maxConcurrentOperationCount = max;
}
-(void)main
{
@autoreleasepool
{
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
if (!self.isCancelled)
{
[target performSelector:@selector(action) withObject:image];
}
}
}
@end
DMWebImageView.h文件进行了修改:
- 将下载类的实例名字进行了修改;
#import <UIKit/UIKit.h>
@class BJCAWebImageDownloader;
NS_ASSUME_NONNULL_BEGIN
@interface BJCAWebImageView : UIImageView
{
UIImage *placeHolderImage;
BJCAWebImageDownloader *downloader;
}
-(void)setImageWithURL:(NSURL *)url;
-(void)downloadFinishedWithImage:(UIImage *)image;
@end
NS_ASSUME_NONNULL_END
BJCAWebImageView.m文件进行了以下修改:
- 下载实例对象的名字进行了修改;
- 在图像下载完成的方法中添加了图像存储的操作;
#import "BJCAWebImageView.h"
#import "BJCAImageCache.h"
#import "BJCAWebImageDownloader.h"
@implementation BJCAWebImageView
#pragma mark RemoteImageView
-(void)setImageWithURL:(NSURL *)url
{
if (downloader != nil)
{
[downloader cancel];//从队列中删除
downloader = nil;
}
//保存占位图图像,以便在视图被重用的时候重新应用占位图
if (placeHolderImage == nil)
{
placeHolderImage = self.image;
}
else
{
self.image = placeHolderImage;
}
//完整的url字符串当做key
UIImage *cachedImage = [[BJCAImageCache sharedImageCache] imageFromKey:[url absoluteString]];
if (cachedImage)
{
self.image = cachedImage;
}
else
{
downloader = [BJCAWebImageDownloader downloaderWithURL:url target:self action:@selector(downloadFinishedWithImage:)];
}
}
-(void)downloadFinishedWithImage:(UIImage *)image
{
self.image = image;
downloader = nil;
[[BJCAImageCache sharedImageCache] storeImage:image forKey:[downloader.url absoluteString]];
}
@end