Merge branch 'master' of https://github.com/SDWebImage/SDWebImage into 5.x
# Conflicts: # CHANGELOG.md # SDWebImage.podspec # SDWebImage.xcodeproj/project.pbxproj # SDWebImage/FLAnimatedImage/FLAnimatedImageView+WebCache.m # SDWebImage/SDImageCache.m # SDWebImage/SDWebImageDownloaderOperation.m # SDWebImage/UIView+WebCache.m # Tests/SDWebImage Tests.xcodeproj/project.pbxproj
This commit is contained in:
commit
b866c6aa97
12
CHANGELOG.md
12
CHANGELOG.md
|
@ -36,14 +36,12 @@ See [all tickets marked for the 5.0.0 release](https://github.com/rs/SDWebImage/
|
||||||
- Rename `sd_UTTypeFromSDImageFormat` to `sd_UTTypeFromImageFormat` #2395
|
- Rename `sd_UTTypeFromSDImageFormat` to `sd_UTTypeFromImageFormat` #2395
|
||||||
- Change `SDImageFormat` to use `NS_TYPED_EXTENSIBLE_ENUM` instead of fixed enum, to allow custom coder plugins to extend it #2400
|
- Change `SDImageFormat` to use `NS_TYPED_EXTENSIBLE_ENUM` instead of fixed enum, to allow custom coder plugins to extend it #2400
|
||||||
|
|
||||||
## [4.4.3 - 4.4 patch, on Nov 12th, 2018](https://github.com/SDWebImage/SDWebImage/releases/tag/4.4.3)
|
## [4.4.3 - 4.4 patch, on Nov 25th, 2018](https://github.com/SDWebImage/SDWebImage/releases/tag/4.4.3)
|
||||||
See [all tickets marked for the 4.4.3 release](https://github.com/SDWebImage/SDWebImage/milestone/28)
|
See [all tickets marked for the 4.4.3 release](https://github.com/SDWebImage/SDWebImage/milestone/28)
|
||||||
|
|
||||||
#### Fixes
|
#### Fixes
|
||||||
- Revert the hack code for `FLAnimatedImage`, because of the `FLAnimatedImage` initializer method blocks the main queue #2441
|
- Revert the hack code for `FLAnimatedImage`, because of the `FLAnimatedImage` initializer method blocks the main queue #2441
|
||||||
- Optimize when scale = 1 #2520
|
|
||||||
- Fix extention long length of file name #2516 6c6d848
|
- Fix extention long length of file name #2516 6c6d848
|
||||||
- Add autoreleasepool to release autorelease objects in advance when using GCD for 4.x #2475
|
|
||||||
- Fix resource key invalid when clean cached disk file #2463
|
- Fix resource key invalid when clean cached disk file #2463
|
||||||
- Fix the test case `testFLAnimatedImageViewSetImageWithURL` because of remote resource is not available #2450
|
- Fix the test case `testFLAnimatedImageViewSetImageWithURL` because of remote resource is not available #2450
|
||||||
- Add default `HTTP User-Agent` for specific system #2409
|
- Add default `HTTP User-Agent` for specific system #2409
|
||||||
|
@ -51,6 +49,14 @@ See [all tickets marked for the 4.4.3 release](https://github.com/SDWebImage/SDW
|
||||||
- remove `addProgressCallback`, add `createDownloaderOperationWithUrl` #2336
|
- remove `addProgressCallback`, add `createDownloaderOperationWithUrl` #2336
|
||||||
- Fix the bug when `FLAnimatedImageView` firstly show one EXIF rotation JPEG `UIImage`, later animated GIF `FLAnimatedImage` will also be rotated #2406
|
- Fix the bug when `FLAnimatedImageView` firstly show one EXIF rotation JPEG `UIImage`, later animated GIF `FLAnimatedImage` will also be rotated #2406
|
||||||
- Replace `SDWebImageDownloaderOperation` with `NSOperation<SDWebImageDownloaderOperationInterface>` to make generic #2397
|
- Replace `SDWebImageDownloaderOperation` with `NSOperation<SDWebImageDownloaderOperationInterface>` to make generic #2397
|
||||||
|
- Fix wrong image cache type when disk and memory cache missed #2529
|
||||||
|
- Fix FLAnimatedImage version check issue for custom property `optimalFrameCacheSize` && `predrawingEnabled` #2543
|
||||||
|
|
||||||
|
#### Performances
|
||||||
|
- Add autoreleasepool to release autorelease objects in advance when using GCD for 4.x #2475
|
||||||
|
- Optimize when scale = 1 #2520
|
||||||
|
|
||||||
|
#### Docs
|
||||||
- Updated URLs after project was transfered to [SDWebImage organization](https://github.com/SDWebImage) #2510 f9d05d9
|
- Updated URLs after project was transfered to [SDWebImage organization](https://github.com/SDWebImage) #2510 f9d05d9
|
||||||
- Tidy up spacing for `README.md` #2511
|
- Tidy up spacing for `README.md` #2511
|
||||||
- Remove versioneye from README #2424
|
- Remove versioneye from README #2424
|
||||||
|
|
11
README.md
11
README.md
|
@ -142,7 +142,16 @@ platform :ios, '7.0'
|
||||||
pod 'SDWebImage', '~> 4.0'
|
pod 'SDWebImage', '~> 4.0'
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are using Swift, be sure to add `use_frameworks!` and set your target to iOS 8+:
|
##### Swift
|
||||||
|
|
||||||
|
If you are using `Swift`, `Xcode 9+` and `CocoaPods` `1.5.0+`, you only need to set your target to `iOS 8+` if you need static library:
|
||||||
|
|
||||||
|
```
|
||||||
|
platform :ios, '8.0'
|
||||||
|
```
|
||||||
|
|
||||||
|
If not, you still need to add `use_frameworks!` to use dynamic framework:
|
||||||
|
|
||||||
```
|
```
|
||||||
platform :ios, '8.0'
|
platform :ios, '8.0'
|
||||||
use_frameworks!
|
use_frameworks!
|
||||||
|
|
|
@ -24,6 +24,7 @@ Pod::Spec.new do |s|
|
||||||
s.requires_arc = true
|
s.requires_arc = true
|
||||||
s.framework = 'ImageIO'
|
s.framework = 'ImageIO'
|
||||||
s.module_map = 'WebImage/SDWebImage.modulemap'
|
s.module_map = 'WebImage/SDWebImage.modulemap'
|
||||||
|
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
|
||||||
|
|
||||||
s.default_subspec = 'Core'
|
s.default_subspec = 'Core'
|
||||||
|
|
||||||
|
|
|
@ -111,6 +111,10 @@
|
||||||
32D1222C2080B2EB003685A3 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D1221C2080B2EB003685A3 /* SDImageCachesManager.m */; };
|
32D1222C2080B2EB003685A3 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D1221C2080B2EB003685A3 /* SDImageCachesManager.m */; };
|
||||||
32D122302080B2EB003685A3 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D1221D2080B2EB003685A3 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
32D122302080B2EB003685A3 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D1221D2080B2EB003685A3 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
32D122322080B2EB003685A3 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D1221D2080B2EB003685A3 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
32D122322080B2EB003685A3 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D1221D2080B2EB003685A3 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
32D3CDCE21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D3CDCC21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m */; };
|
||||||
|
32D3CDCF21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D3CDCC21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m */; };
|
||||||
|
32D3CDD021DDE87300C4DB49 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D3CDCD21DDE87300C4DB49 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
32D3CDD121DDE87300C4DB49 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D3CDCD21DDE87300C4DB49 /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
32EB6D8E206D132E005CAEF6 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 320224BA203979BA00E9F285 /* SDAnimatedImageRep.m */; };
|
32EB6D8E206D132E005CAEF6 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 320224BA203979BA00E9F285 /* SDAnimatedImageRep.m */; };
|
||||||
32EB6D91206D132E005CAEF6 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 320224BA203979BA00E9F285 /* SDAnimatedImageRep.m */; };
|
32EB6D91206D132E005CAEF6 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 320224BA203979BA00E9F285 /* SDAnimatedImageRep.m */; };
|
||||||
32F21B5120788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F21B4F20788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
32F21B5120788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F21B4F20788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
@ -275,6 +279,8 @@
|
||||||
32D1221B2080B2EB003685A3 /* SDImageCacheDefine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCacheDefine.m; sourceTree = "<group>"; };
|
32D1221B2080B2EB003685A3 /* SDImageCacheDefine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCacheDefine.m; sourceTree = "<group>"; };
|
||||||
32D1221C2080B2EB003685A3 /* SDImageCachesManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCachesManager.m; sourceTree = "<group>"; };
|
32D1221C2080B2EB003685A3 /* SDImageCachesManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCachesManager.m; sourceTree = "<group>"; };
|
||||||
32D1221D2080B2EB003685A3 /* SDImageCachesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCachesManager.h; sourceTree = "<group>"; };
|
32D1221D2080B2EB003685A3 /* SDImageCachesManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCachesManager.h; sourceTree = "<group>"; };
|
||||||
|
32D3CDCC21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+MemoryCacheCost.m"; sourceTree = "<group>"; };
|
||||||
|
32D3CDCD21DDE87300C4DB49 /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+MemoryCacheCost.h"; sourceTree = "<group>"; };
|
||||||
32F21B4F20788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloaderRequestModifier.h; sourceTree = "<group>"; };
|
32F21B4F20788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloaderRequestModifier.h; sourceTree = "<group>"; };
|
||||||
32F21B5020788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloaderRequestModifier.m; sourceTree = "<group>"; };
|
32F21B5020788D8C0036B1D5 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloaderRequestModifier.m; sourceTree = "<group>"; };
|
||||||
32F7C06D2030114C00873181 /* SDImageTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDImageTransformer.h; sourceTree = "<group>"; };
|
32F7C06D2030114C00873181 /* SDImageTransformer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDImageTransformer.h; sourceTree = "<group>"; };
|
||||||
|
@ -544,6 +550,8 @@
|
||||||
321E60BD1F38E91700405457 /* UIImage+ForceDecode.m */,
|
321E60BD1F38E91700405457 /* UIImage+ForceDecode.m */,
|
||||||
32F7C07D2030719600873181 /* UIImage+Transform.h */,
|
32F7C07D2030719600873181 /* UIImage+Transform.h */,
|
||||||
32F7C07C2030719600873181 /* UIImage+Transform.m */,
|
32F7C07C2030719600873181 /* UIImage+Transform.m */,
|
||||||
|
32D3CDCD21DDE87300C4DB49 /* UIImage+MemoryCacheCost.h */,
|
||||||
|
32D3CDCC21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m */,
|
||||||
4397D2F41D0DE2DF00BB2784 /* NSImage+Compatibility.h */,
|
4397D2F41D0DE2DF00BB2784 /* NSImage+Compatibility.h */,
|
||||||
4397D2F51D0DE2DF00BB2784 /* NSImage+Compatibility.m */,
|
4397D2F51D0DE2DF00BB2784 /* NSImage+Compatibility.m */,
|
||||||
AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */,
|
AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */,
|
||||||
|
@ -628,6 +636,7 @@
|
||||||
32D122202080B2EB003685A3 /* SDImageCacheDefine.h in Headers */,
|
32D122202080B2EB003685A3 /* SDImageCacheDefine.h in Headers */,
|
||||||
32B9B539206ED4230026769D /* SDWebImageDownloaderConfig.h in Headers */,
|
32B9B539206ED4230026769D /* SDWebImageDownloaderConfig.h in Headers */,
|
||||||
3257EAFA21898AED0097B271 /* SDImageGraphics.h in Headers */,
|
3257EAFA21898AED0097B271 /* SDImageGraphics.h in Headers */,
|
||||||
|
32D3CDD121DDE87300C4DB49 /* UIImage+MemoryCacheCost.h in Headers */,
|
||||||
328BB6AC2081FEE500760D6C /* SDWebImageCacheSerializer.h in Headers */,
|
328BB6AC2081FEE500760D6C /* SDWebImageCacheSerializer.h in Headers */,
|
||||||
321B378F2083290E00C0EA77 /* SDImageLoadersManager.h in Headers */,
|
321B378F2083290E00C0EA77 /* SDImageLoadersManager.h in Headers */,
|
||||||
329A185B1FFF5DFD008C9A2F /* UIImage+Metadata.h in Headers */,
|
329A185B1FFF5DFD008C9A2F /* UIImage+Metadata.h in Headers */,
|
||||||
|
@ -684,6 +693,7 @@
|
||||||
32CF1C071FA496B000004BD1 /* SDImageCoderHelper.h in Headers */,
|
32CF1C071FA496B000004BD1 /* SDImageCoderHelper.h in Headers */,
|
||||||
32F7C0842030719600873181 /* UIImage+Transform.h in Headers */,
|
32F7C0842030719600873181 /* UIImage+Transform.h in Headers */,
|
||||||
3257EAF921898AED0097B271 /* SDImageGraphics.h in Headers */,
|
3257EAF921898AED0097B271 /* SDImageGraphics.h in Headers */,
|
||||||
|
32D3CDD021DDE87300C4DB49 /* UIImage+MemoryCacheCost.h in Headers */,
|
||||||
53761316155AD0D5005750A4 /* SDImageCache.h in Headers */,
|
53761316155AD0D5005750A4 /* SDImageCache.h in Headers */,
|
||||||
325312C8200F09910046BF1E /* SDWebImageTransition.h in Headers */,
|
325312C8200F09910046BF1E /* SDWebImageTransition.h in Headers */,
|
||||||
32C0FDE12013426C001B8F2D /* SDWebImageIndicator.h in Headers */,
|
32C0FDE12013426C001B8F2D /* SDWebImageIndicator.h in Headers */,
|
||||||
|
@ -879,6 +889,7 @@
|
||||||
328BB6A42081FED200760D6C /* SDWebImageCacheKeyFilter.m in Sources */,
|
328BB6A42081FED200760D6C /* SDWebImageCacheKeyFilter.m in Sources */,
|
||||||
4A2CAE2E1AB4BB7500B6BC39 /* UIImage+GIF.m in Sources */,
|
4A2CAE2E1AB4BB7500B6BC39 /* UIImage+GIF.m in Sources */,
|
||||||
80B6DF822142B44400BCB334 /* NSButton+WebCache.m in Sources */,
|
80B6DF822142B44400BCB334 /* NSButton+WebCache.m in Sources */,
|
||||||
|
32D3CDCF21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m in Sources */,
|
||||||
320CAE1D2086F50500CFFC80 /* SDWebImageError.m in Sources */,
|
320CAE1D2086F50500CFFC80 /* SDWebImageError.m in Sources */,
|
||||||
32CF1C0F1FA496B000004BD1 /* SDImageCoderHelper.m in Sources */,
|
32CF1C0F1FA496B000004BD1 /* SDImageCoderHelper.m in Sources */,
|
||||||
328BB6D52082581100760D6C /* SDMemoryCache.m in Sources */,
|
328BB6D52082581100760D6C /* SDMemoryCache.m in Sources */,
|
||||||
|
@ -933,6 +944,7 @@
|
||||||
328BB6A22081FED200760D6C /* SDWebImageCacheKeyFilter.m in Sources */,
|
328BB6A22081FED200760D6C /* SDWebImageCacheKeyFilter.m in Sources */,
|
||||||
53761309155AD0D5005750A4 /* SDImageCache.m in Sources */,
|
53761309155AD0D5005750A4 /* SDImageCache.m in Sources */,
|
||||||
80B6DF832142B44500BCB334 /* NSButton+WebCache.m in Sources */,
|
80B6DF832142B44500BCB334 /* NSButton+WebCache.m in Sources */,
|
||||||
|
32D3CDCE21DDE87300C4DB49 /* UIImage+MemoryCacheCost.m in Sources */,
|
||||||
320CAE1B2086F50500CFFC80 /* SDWebImageError.m in Sources */,
|
320CAE1B2086F50500CFFC80 /* SDWebImageError.m in Sources */,
|
||||||
32CF1C0D1FA496B000004BD1 /* SDImageCoderHelper.m in Sources */,
|
32CF1C0D1FA496B000004BD1 /* SDImageCoderHelper.m in Sources */,
|
||||||
328BB6D32082581100760D6C /* SDMemoryCache.m in Sources */,
|
328BB6D32082581100760D6C /* SDMemoryCache.m in Sources */,
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#import "SDImageTransformer.h"
|
#import "SDImageTransformer.h"
|
||||||
#import "SDImageCoderHelper.h"
|
#import "SDImageCoderHelper.h"
|
||||||
#import "SDAnimatedImage.h"
|
#import "SDAnimatedImage.h"
|
||||||
|
#import "UIImage+MemoryCacheCost.h"
|
||||||
|
|
||||||
@interface SDImageCache ()
|
@interface SDImageCache ()
|
||||||
|
|
||||||
|
@ -178,7 +179,7 @@
|
||||||
}
|
}
|
||||||
// if memory cache is enabled
|
// if memory cache is enabled
|
||||||
if (toMemory && self.config.shouldCacheImagesInMemory) {
|
if (toMemory && self.config.shouldCacheImagesInMemory) {
|
||||||
NSUInteger cost = SDMemoryCacheCostForImage(image);
|
NSUInteger cost = image.sd_memoryCost;
|
||||||
[self.memCache setObject:image forKey:key cost:cost];
|
[self.memCache setObject:image forKey:key cost:cost];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +217,7 @@
|
||||||
if (!image || !key) {
|
if (!image || !key) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NSUInteger cost = SDMemoryCacheCostForImage(image);
|
NSUInteger cost = image.sd_memoryCost;
|
||||||
[self.memCache setObject:image forKey:key cost:cost];
|
[self.memCache setObject:image forKey:key cost:cost];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,7 +295,7 @@
|
||||||
- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key {
|
- (nullable UIImage *)imageFromDiskCacheForKey:(nullable NSString *)key {
|
||||||
UIImage *diskImage = [self diskImageForKey:key];
|
UIImage *diskImage = [self diskImageForKey:key];
|
||||||
if (diskImage && self.config.shouldCacheImagesInMemory) {
|
if (diskImage && self.config.shouldCacheImagesInMemory) {
|
||||||
NSUInteger cost = SDMemoryCacheCostForImage(diskImage);
|
NSUInteger cost = diskImage.sd_memoryCost;
|
||||||
[self.memCache setObject:diskImage forKey:key cost:cost];
|
[self.memCache setObject:diskImage forKey:key cost:cost];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -411,7 +412,7 @@
|
||||||
// decode image data only if in-memory cache missed
|
// decode image data only if in-memory cache missed
|
||||||
diskImage = [self diskImageForKey:key data:diskData options:options context:context];
|
diskImage = [self diskImageForKey:key data:diskData options:options context:context];
|
||||||
if (diskImage && self.config.shouldCacheImagesInMemory) {
|
if (diskImage && self.config.shouldCacheImagesInMemory) {
|
||||||
NSUInteger cost = SDMemoryCacheCostForImage(diskImage);
|
NSUInteger cost = diskImage.sd_memoryCost;
|
||||||
[self.memCache setObject:diskImage forKey:key cost:cost];
|
[self.memCache setObject:diskImage forKey:key cost:cost];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,14 +8,6 @@
|
||||||
|
|
||||||
#import "SDWebImageCompat.h"
|
#import "SDWebImageCompat.h"
|
||||||
|
|
||||||
/**
|
|
||||||
Return the memory cache cost for specify image
|
|
||||||
|
|
||||||
@param image The image to store in cache
|
|
||||||
@return The memory cost for the image
|
|
||||||
*/
|
|
||||||
FOUNDATION_EXPORT NSUInteger SDMemoryCacheCostForImage(UIImage * _Nullable image);
|
|
||||||
|
|
||||||
@class SDImageCacheConfig;
|
@class SDImageCacheConfig;
|
||||||
// A protocol to allow custom memory cache used in SDImageCache.
|
// A protocol to allow custom memory cache used in SDImageCache.
|
||||||
@protocol SDMemoryCache <NSObject>
|
@protocol SDMemoryCache <NSObject>
|
||||||
|
|
|
@ -8,14 +8,7 @@
|
||||||
|
|
||||||
#import "SDMemoryCache.h"
|
#import "SDMemoryCache.h"
|
||||||
#import "SDImageCacheConfig.h"
|
#import "SDImageCacheConfig.h"
|
||||||
|
#import "UIImage+MemoryCacheCost.h"
|
||||||
NSUInteger SDMemoryCacheCostForImage(UIImage * _Nullable image) {
|
|
||||||
#if SD_MAC
|
|
||||||
return image.size.height * image.size.width;
|
|
||||||
#elif SD_UIKIT || SD_WATCH
|
|
||||||
return image.size.height * image.size.width * image.scale * image.scale;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void * SDMemoryCacheContext = &SDMemoryCacheContext;
|
static void * SDMemoryCacheContext = &SDMemoryCacheContext;
|
||||||
|
|
||||||
|
@ -109,7 +102,7 @@ static void * SDMemoryCacheContext = &SDMemoryCacheContext;
|
||||||
// Sync cache
|
// Sync cache
|
||||||
NSUInteger cost = 0;
|
NSUInteger cost = 0;
|
||||||
if ([obj isKindOfClass:[UIImage class]]) {
|
if ([obj isKindOfClass:[UIImage class]]) {
|
||||||
cost = SDMemoryCacheCostForImage(obj);
|
cost = [(UIImage *)obj sd_memoryCost];
|
||||||
}
|
}
|
||||||
[super setObject:obj forKey:key cost:cost];
|
[super setObject:obj forKey:key cost:cost];
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the SDWebImage package.
|
||||||
|
* (c) Olivier Poitrey <rs@dailymotion.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "SDWebImageCompat.h"
|
||||||
|
|
||||||
|
@interface UIImage (MemoryCacheCost)
|
||||||
|
|
||||||
|
/**
|
||||||
|
The memory cache cost for specify image used by image cache. The cost function is the pixles count held in memory.
|
||||||
|
If you set some associated object to `UIImage`, you can set the custom value to indicate the memory cost.
|
||||||
|
|
||||||
|
For `UIImage`, this method return the single frame pixles count when `image.images` is nil for static image. Retuen full frame pixels count when `image.images` is not nil for animated image.
|
||||||
|
For `NSImage`, this method return the single frame pixels count because `NSImage` does not store all frames in memory.
|
||||||
|
@note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods.
|
||||||
|
*/
|
||||||
|
@property (assign, nonatomic) NSUInteger sd_memoryCost;
|
||||||
|
|
||||||
|
@end
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the SDWebImage package.
|
||||||
|
* (c) Olivier Poitrey <rs@dailymotion.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "UIImage+MemoryCacheCost.h"
|
||||||
|
#import "objc/runtime.h"
|
||||||
|
|
||||||
|
FOUNDATION_STATIC_INLINE NSUInteger SDMemoryCacheCostForImage(UIImage *image) {
|
||||||
|
#if SD_MAC
|
||||||
|
return image.size.height * image.size.width;
|
||||||
|
#elif SD_UIKIT || SD_WATCH
|
||||||
|
NSUInteger imageSize = image.size.height * image.size.width * image.scale * image.scale;
|
||||||
|
return image.images ? (imageSize * image.images.count) : imageSize;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation UIImage (MemoryCacheCost)
|
||||||
|
|
||||||
|
- (NSUInteger)sd_memoryCost {
|
||||||
|
NSNumber *value = objc_getAssociatedObject(self, @selector(sd_memoryCost));
|
||||||
|
NSUInteger memoryCost;
|
||||||
|
if (value != nil) {
|
||||||
|
memoryCost = [value unsignedIntegerValue];
|
||||||
|
} else {
|
||||||
|
memoryCost = SDMemoryCacheCostForImage(self);
|
||||||
|
}
|
||||||
|
return memoryCost;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setSd_memoryCost:(NSUInteger)sd_memoryCost {
|
||||||
|
objc_setAssociatedObject(self, @selector(sd_memoryCost), @(sd_memoryCost), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -43,6 +43,7 @@ FOUNDATION_EXPORT const unsigned char WebImageVersionString[];
|
||||||
#import <SDWebImage/UIView+WebCacheOperation.h>
|
#import <SDWebImage/UIView+WebCacheOperation.h>
|
||||||
#import <SDWebImage/UIImage+Metadata.h>
|
#import <SDWebImage/UIImage+Metadata.h>
|
||||||
#import <SDWebImage/UIImage+MultiFormat.h>
|
#import <SDWebImage/UIImage+MultiFormat.h>
|
||||||
|
#import <SDWebImage/UIImage+MemoryCacheCost.h>
|
||||||
#import <SDWebImage/SDWebImageOperation.h>
|
#import <SDWebImage/SDWebImageOperation.h>
|
||||||
#import <SDWebImage/SDWebImageDownloader.h>
|
#import <SDWebImage/SDWebImageDownloader.h>
|
||||||
#import <SDWebImage/SDWebImageTransition.h>
|
#import <SDWebImage/SDWebImageTransition.h>
|
||||||
|
|
Loading…
Reference in New Issue