lipengwei
2020-07-07 bf3f86e66edcc22d787a99198118e7b2ad71ecd9
commit | author | age
633752 1 // AFAutoPurgingImageCache.h
L 2 // Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ )
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining a copy
5 // of this software and associated documentation files (the "Software"), to deal
6 // in the Software without restriction, including without limitation the rights
7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 // copies of the Software, and to permit persons to whom the Software is
9 // furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 // THE SOFTWARE.
21
22 #import <TargetConditionals.h>
23 #import <Foundation/Foundation.h>
24
25 #if TARGET_OS_IOS || TARGET_OS_TV
26 #import <UIKit/UIKit.h>
27
28 NS_ASSUME_NONNULL_BEGIN
29
30 /**
31  The `AFImageCache` protocol defines a set of APIs for adding, removing and fetching images from a cache synchronously.
32  */
33 @protocol AFImageCache <NSObject>
34
35 /**
36  Adds the image to the cache with the given identifier.
37
38  @param image The image to cache.
39  @param identifier The unique identifier for the image in the cache.
40  */
41 - (void)addImage:(UIImage *)image withIdentifier:(NSString *)identifier;
42
43 /**
44  Removes the image from the cache matching the given identifier.
45
46  @param identifier The unique identifier for the image in the cache.
47
48  @return A BOOL indicating whether or not the image was removed from the cache.
49  */
50 - (BOOL)removeImageWithIdentifier:(NSString *)identifier;
51
52 /**
53  Removes all images from the cache.
54
55  @return A BOOL indicating whether or not all images were removed from the cache.
56  */
57 - (BOOL)removeAllImages;
58
59 /**
60  Returns the image in the cache associated with the given identifier.
61
62  @param identifier The unique identifier for the image in the cache.
63
64  @return An image for the matching identifier, or nil.
65  */
66 - (nullable UIImage *)imageWithIdentifier:(NSString *)identifier;
67 @end
68
69
70 /**
71  The `ImageRequestCache` protocol extends the `ImageCache` protocol by adding methods for adding, removing and fetching images from a cache given an `NSURLRequest` and additional identifier.
72  */
73 @protocol AFImageRequestCache <AFImageCache>
74
75 /**
76  Asks if the image should be cached using an identifier created from the request and additional identifier.
77  
78  @param image The image to be cached.
79  @param request The unique URL request identifing the image asset.
80  @param identifier The additional identifier to apply to the URL request to identify the image.
81  
82  @return A BOOL indicating whether or not the image should be added to the cache. YES will cache, NO will prevent caching.
83  */
84 - (BOOL)shouldCacheImage:(UIImage *)image forRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier;
85
86 /**
87  Adds the image to the cache using an identifier created from the request and additional identifier.
88
89  @param image The image to cache.
90  @param request The unique URL request identifing the image asset.
91  @param identifier The additional identifier to apply to the URL request to identify the image.
92  */
93 - (void)addImage:(UIImage *)image forRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier;
94
95 /**
96  Removes the image from the cache using an identifier created from the request and additional identifier.
97
98  @param request The unique URL request identifing the image asset.
99  @param identifier The additional identifier to apply to the URL request to identify the image.
100  
101  @return A BOOL indicating whether or not all images were removed from the cache.
102  */
103 - (BOOL)removeImageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier;
104
105 /**
106  Returns the image from the cache associated with an identifier created from the request and additional identifier.
107
108  @param request The unique URL request identifing the image asset.
109  @param identifier The additional identifier to apply to the URL request to identify the image.
110
111  @return An image for the matching request and identifier, or nil.
112  */
113 - (nullable UIImage *)imageforRequest:(NSURLRequest *)request withAdditionalIdentifier:(nullable NSString *)identifier;
114
115 @end
116
117 /**
118  The `AutoPurgingImageCache` in an in-memory image cache used to store images up to a given memory capacity. When the memory capacity is reached, the image cache is sorted by last access date, then the oldest image is continuously purged until the preferred memory usage after purge is met. Each time an image is accessed through the cache, the internal access date of the image is updated.
119  */
120 @interface AFAutoPurgingImageCache : NSObject <AFImageRequestCache>
121
122 /**
123  The total memory capacity of the cache in bytes.
124  */
125 @property (nonatomic, assign) UInt64 memoryCapacity;
126
127 /**
128  The preferred memory usage after purge in bytes. During a purge, images will be purged until the memory capacity drops below this limit.
129  */
130 @property (nonatomic, assign) UInt64 preferredMemoryUsageAfterPurge;
131
132 /**
133  The current total memory usage in bytes of all images stored within the cache.
134  */
135 @property (nonatomic, assign, readonly) UInt64 memoryUsage;
136
137 /**
138  Initialies the `AutoPurgingImageCache` instance with default values for memory capacity and preferred memory usage after purge limit. `memoryCapcity` defaults to `100 MB`. `preferredMemoryUsageAfterPurge` defaults to `60 MB`.
139
140  @return The new `AutoPurgingImageCache` instance.
141  */
142 - (instancetype)init;
143
144 /**
145  Initialies the `AutoPurgingImageCache` instance with the given memory capacity and preferred memory usage
146  after purge limit.
147
148  @param memoryCapacity The total memory capacity of the cache in bytes.
149  @param preferredMemoryCapacity The preferred memory usage after purge in bytes.
150
151  @return The new `AutoPurgingImageCache` instance.
152  */
153 - (instancetype)initWithMemoryCapacity:(UInt64)memoryCapacity preferredMemoryCapacity:(UInt64)preferredMemoryCapacity;
154
155 @end
156
157 NS_ASSUME_NONNULL_END
158
159 #endif
160