Merge branch 'master' of https://github.com/rs/SDWebImage into 5.x
* 'master' of https://github.com/rs/SDWebImage: Fix the getSize method which use the default file manager instead of current file manager Deprecate the sd_setImageWithPreviousCachedImageWithURL with the specify options to achieve this usage Use the @synchronized to access NSURLCache to fix the potential thread-safe problem, also fix that we always use shared cache but not follow session's configuration
This commit is contained in:
commit
e4c1ab86e7
|
@ -627,7 +627,7 @@ FOUNDATION_STATIC_INLINE NSUInteger SDCacheCostForImage(UIImage *image) {
|
|||
NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
|
||||
for (NSString *fileName in fileEnumerator) {
|
||||
NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
|
||||
NSDictionary<NSString *, id> *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
|
||||
NSDictionary<NSString *, id> *attrs = [_fileManager attributesOfItemAtPath:filePath error:nil];
|
||||
size += [attrs fileSize];
|
||||
}
|
||||
});
|
||||
|
|
|
@ -135,14 +135,6 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
|
|||
}];
|
||||
}
|
||||
#endif
|
||||
if (self.options & SDWebImageDownloaderIgnoreCachedResponse) {
|
||||
// Grab the cached data for later check
|
||||
NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:self.request];
|
||||
if (cachedResponse) {
|
||||
self.cachedData = cachedResponse.data;
|
||||
}
|
||||
}
|
||||
|
||||
NSURLSession *session = self.unownedSession;
|
||||
if (!self.unownedSession) {
|
||||
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
|
||||
|
@ -159,6 +151,22 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
|
|||
session = self.ownedSession;
|
||||
}
|
||||
|
||||
if (self.options & SDWebImageDownloaderIgnoreCachedResponse) {
|
||||
// Grab the cached data for later check
|
||||
NSURLCache *URLCache = session.configuration.URLCache;
|
||||
if (!URLCache) {
|
||||
URLCache = [NSURLCache sharedURLCache];
|
||||
}
|
||||
NSCachedURLResponse *cachedResponse;
|
||||
// NSURLCache's `cachedResponseForRequest:` is not thread-safe, see https://developer.apple.com/documentation/foundation/nsurlcache#2317483
|
||||
@synchronized (URLCache) {
|
||||
cachedResponse = [URLCache cachedResponseForRequest:self.request];
|
||||
}
|
||||
if (cachedResponse) {
|
||||
self.cachedData = cachedResponse.data;
|
||||
}
|
||||
}
|
||||
|
||||
self.dataTask = [session dataTaskWithRequest:self.request];
|
||||
self.executing = YES;
|
||||
}
|
||||
|
|
|
@ -155,7 +155,9 @@
|
|||
completed:(nullable SDExternalCompletionBlock)completedBlock;
|
||||
|
||||
/**
|
||||
* Set the imageView `image` with an `url` and optionally a placeholder image.
|
||||
* Set the imageView `image` with an `url` and custom options. The placeholder image is from previous cached image and will use the provided one instead if the query failed.
|
||||
* This method was designed to ensure that placeholder and query cache process happened in the same runloop to avoid flashing on cell during two `setImage:` call. But it's really misunderstanding and deprecated.
|
||||
* This can be done by using `sd_setImageWithURL:` with `SDWebImageQueryDiskSync`. But take care that if the memory cache missed, query disk cache synchronously may reduce the frame rate
|
||||
*
|
||||
* The download is asynchronous and cached.
|
||||
*
|
||||
|
@ -169,12 +171,13 @@
|
|||
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
|
||||
* indicating if the image was retrieved from the local cache or from the network.
|
||||
* The fourth parameter is the original image url.
|
||||
* @deprecated consider using `SDWebImageQueryDiskSync` options with `sd_setImageWithURL:` instead
|
||||
*/
|
||||
- (void)sd_setImageWithPreviousCachedImageWithURL:(nullable NSURL *)url
|
||||
placeholderImage:(nullable UIImage *)placeholder
|
||||
options:(SDWebImageOptions)options
|
||||
progress:(nullable SDWebImageDownloaderProgressBlock)progressBlock
|
||||
completed:(nullable SDExternalCompletionBlock)completedBlock;
|
||||
completed:(nullable SDExternalCompletionBlock)completedBlock __deprecated_msg("This method is misunderstanding and deprecated, consider using `SDWebImageQueryDiskSync` options with `sd_setImageWithURL:` instead");
|
||||
|
||||
#if SD_UIKIT
|
||||
|
||||
|
|
Loading…
Reference in New Issue