LPW
2022-01-05 0b97cfb3490c70664ec62cd5f9e5f01abd912270
commit | author | age
633752 1 // AFImageDownloader.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
24 #if TARGET_OS_IOS || TARGET_OS_TV 
25
26 #import <Foundation/Foundation.h>
27 #import "AFAutoPurgingImageCache.h"
28 #import "AFHTTPSessionManager.h"
29
30 NS_ASSUME_NONNULL_BEGIN
31
32 typedef NS_ENUM(NSInteger, AFImageDownloadPrioritization) {
33     AFImageDownloadPrioritizationFIFO,
34     AFImageDownloadPrioritizationLIFO
35 };
36
37 /**
38  The `AFImageDownloadReceipt` is an object vended by the `AFImageDownloader` when starting a data task. It can be used to cancel active tasks running on the `AFImageDownloader` session. As a general rule, image data tasks should be cancelled using the `AFImageDownloadReceipt` instead of calling `cancel` directly on the `task` itself. The `AFImageDownloader` is optimized to handle duplicate task scenarios as well as pending versus active downloads.
39  */
40 @interface AFImageDownloadReceipt : NSObject
41
42 /**
43  The data task created by the `AFImageDownloader`.
44 */
45 @property (nonatomic, strong) NSURLSessionDataTask *task;
46
47 /**
48  The unique identifier for the success and failure blocks when duplicate requests are made.
49  */
50 @property (nonatomic, strong) NSUUID *receiptID;
51 @end
52
53 /** The `AFImageDownloader` class is responsible for downloading images in parallel on a prioritized queue. Incoming downloads are added to the front or back of the queue depending on the download prioritization. Each downloaded image is cached in the underlying `NSURLCache` as well as the in-memory image cache. By default, any download request with a cached image equivalent in the image cache will automatically be served the cached image representation.
54  */
55 @interface AFImageDownloader : NSObject
56
57 /**
58  The image cache used to store all downloaded images in. `AFAutoPurgingImageCache` by default.
59  */
60 @property (nonatomic, strong, nullable) id <AFImageRequestCache> imageCache;
61
62 /**
63  The `AFHTTPSessionManager` used to download images. By default, this is configured with an `AFImageResponseSerializer`, and a shared `NSURLCache` for all image downloads.
64  */
65 @property (nonatomic, strong) AFHTTPSessionManager *sessionManager;
66
67 /**
68  Defines the order prioritization of incoming download requests being inserted into the queue. `AFImageDownloadPrioritizationFIFO` by default.
69  */
bf3f86 70 @property (nonatomic, assign) AFImageDownloadPrioritization downloadPrioritization;
633752 71
L 72 /**
73  The shared default instance of `AFImageDownloader` initialized with default values.
74  */
75 + (instancetype)defaultInstance;
76
77 /**
78  Creates a default `NSURLCache` with common usage parameter values.
79
80  @returns The default `NSURLCache` instance.
81  */
82 + (NSURLCache *)defaultURLCache;
83
84 /**
85  The default `NSURLSessionConfiguration` with common usage parameter values.
86  */
87 + (NSURLSessionConfiguration *)defaultURLSessionConfiguration;
88
89 /**
90  Default initializer
91
92  @return An instance of `AFImageDownloader` initialized with default values.
93  */
94 - (instancetype)init;
95
96 /**
97  Initializer with specific `URLSessionConfiguration`
98  
99  @param configuration The `NSURLSessionConfiguration` to be be used
100  
101  @return An instance of `AFImageDownloader` initialized with default values and custom `NSURLSessionConfiguration`
102  */
103 - (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration;
104
105 /**
106  Initializes the `AFImageDownloader` instance with the given session manager, download prioritization, maximum active download count and image cache.
107
108  @param sessionManager The session manager to use to download images.
109  @param downloadPrioritization The download prioritization of the download queue.
110  @param maximumActiveDownloads  The maximum number of active downloads allowed at any given time. Recommend `4`.
111  @param imageCache The image cache used to store all downloaded images in.
112
113  @return The new `AFImageDownloader` instance.
114  */
115 - (instancetype)initWithSessionManager:(AFHTTPSessionManager *)sessionManager
116                 downloadPrioritization:(AFImageDownloadPrioritization)downloadPrioritization
117                 maximumActiveDownloads:(NSInteger)maximumActiveDownloads
118                             imageCache:(nullable id <AFImageRequestCache>)imageCache;
119
120 /**
121  Creates a data task using the `sessionManager` instance for the specified URL request.
122
123  If the same data task is already in the queue or currently being downloaded, the success and failure blocks are
124  appended to the already existing task. Once the task completes, all success or failure blocks attached to the
125  task are executed in the order they were added.
126
127  @param request The URL request.
128  @param success A block to be executed when the image data task finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`.
129  @param failure A block object to be executed when the image data task finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred.
130
131  @return The image download receipt for the data task if available. `nil` if the image is stored in the cache.
132  cache and the URL request cache policy allows the cache to be used.
133  */
134 - (nullable AFImageDownloadReceipt *)downloadImageForURLRequest:(NSURLRequest *)request
135                                                         success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse  * _Nullable response, UIImage *responseObject))success
136                                                         failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure;
137
138 /**
139  Creates a data task using the `sessionManager` instance for the specified URL request.
140
141  If the same data task is already in the queue or currently being downloaded, the success and failure blocks are
142  appended to the already existing task. Once the task completes, all success or failure blocks attached to the
143  task are executed in the order they were added.
144
145  @param request The URL request.
146  @param receiptID The identifier to use for the download receipt that will be created for this request. This must be a unique identifier that does not represent any other request.
147  @param success A block to be executed when the image data task finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the image created from the response data of request. If the image was returned from cache, the response parameter will be `nil`.
148  @param failure A block object to be executed when the image data task finishes unsuccessfully, or that finishes successfully. This block has no return value and takes three arguments: the request sent from the client, the response received from the server, and the error object describing the network or parsing error that occurred.
149
150  @return The image download receipt for the data task if available. `nil` if the image is stored in the cache.
151  cache and the URL request cache policy allows the cache to be used.
152  */
153 - (nullable AFImageDownloadReceipt *)downloadImageForURLRequest:(NSURLRequest *)request
154                                                  withReceiptID:(NSUUID *)receiptID
155                                                         success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse  * _Nullable response, UIImage *responseObject))success
156                                                         failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure;
157
158 /**
159  Cancels the data task in the receipt by removing the corresponding success and failure blocks and cancelling the data task if necessary.
160
161  If the data task is pending in the queue, it will be cancelled if no other success and failure blocks are registered with the data task. If the data task is currently executing or is already completed, the success and failure blocks are removed and will not be called when the task finishes.
162
163  @param imageDownloadReceipt The image download receipt to cancel.
164  */
165 - (void)cancelTaskForImageDownloadReceipt:(AFImageDownloadReceipt *)imageDownloadReceipt;
166
167 @end
168
169 #endif
170
171 NS_ASSUME_NONNULL_END