123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- //
- // YYWebImageManager.m
- // YYKit <https://github.com/ibireme/YYKit>
- //
- // Created by ibireme on 15/2/19.
- // Copyright (c) 2015 ibireme.
- //
- // This source code is licensed under the MIT-style license found in the
- // LICENSE file in the root directory of this source tree.
- //
- #import "YYWebImageManager.h"
- #import "YYImageCache.h"
- #import "YYWebImageOperation.h"
- #import "YYImageCoder.h"
- @implementation YYWebImageManager
- + (instancetype)sharedManager {
- static YYWebImageManager *manager;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- YYImageCache *cache = [YYImageCache sharedCache];
- NSOperationQueue *queue = [NSOperationQueue new];
- if ([queue respondsToSelector:@selector(setQualityOfService:)]) {
- queue.qualityOfService = NSQualityOfServiceBackground;
- }
- manager = [[self alloc] initWithCache:cache queue:queue];
- });
- return manager;
- }
- - (instancetype)init {
- @throw [NSException exceptionWithName:@"YYWebImageManager init error" reason:@"Use the designated initializer to init." userInfo:nil];
- return [self initWithCache:nil queue:nil];
- }
- - (instancetype)initWithCache:(YYImageCache *)cache queue:(NSOperationQueue *)queue{
- self = [super init];
- if (!self) return nil;
- _cache = cache;
- _queue = queue;
- _timeout = 15.0;
- if (YYImageWebPAvailable()) {
- _headers = @{ @"Accept" : @"image/webp,image/*;q=0.8" };
- } else {
- _headers = @{ @"Accept" : @"image/*;q=0.8" };
- }
- return self;
- }
- - (YYWebImageOperation *)requestImageWithURL:(NSURL *)url
- options:(YYWebImageOptions)options
- progress:(YYWebImageProgressBlock)progress
- transform:(YYWebImageTransformBlock)transform
- completion:(YYWebImageCompletionBlock)completion {
-
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
- request.timeoutInterval = _timeout;
- request.HTTPShouldHandleCookies = (options & YYWebImageOptionHandleCookies) != 0;
- request.allHTTPHeaderFields = [self headersForURL:url];
- request.HTTPShouldUsePipelining = YES;
- request.cachePolicy = (options & YYWebImageOptionUseNSURLCache) ?
- NSURLRequestUseProtocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData;
-
- YYWebImageOperation *operation = [[YYWebImageOperation alloc] initWithRequest:request
- options:options
- cache:_cache
- cacheKey:[self cacheKeyForURL:url]
- progress:progress
- transform:transform ? transform : _sharedTransformBlock
- completion:completion];
- if (_username && _password) {
- operation.credential = [NSURLCredential credentialWithUser:_username password:_password persistence:NSURLCredentialPersistenceForSession];
- }
- if (operation) {
- NSOperationQueue *queue = _queue;
- if (queue) {
- [queue addOperation:operation];
- } else {
- [operation start];
- }
- }
- return operation;
- }
- - (NSDictionary *)headersForURL:(NSURL *)url {
- if (!url) return nil;
- return _headersFilter ? _headersFilter(url, _headers) : _headers;
- }
- - (NSString *)cacheKeyForURL:(NSURL *)url {
- if (!url) return nil;
- return _cacheKeyFilter ? _cacheKeyFilter(url) : url.absoluteString;
- }
- @end
|