// // MCURLRequest.h // MCDownloadManager // // Created by 马超 on 16/9/23. // Copyright © 2016年 qikeyun. All rights reserved. // #import #import "MCURLSessionConfiguration.h" #import "MCURLResponse.h" NS_ASSUME_NONNULL_BEGIN @class MCURLRequest; @protocol MCURLRequestDelegate @optional - (void)URLRequest:(MCURLRequest *)request didCompleteWithResponse:(MCURLResponse *)response; @end typedef NS_ENUM(NSUInteger, MCHTTPMethod) { MCHTTPMethodGET, MCHTTPMethodPOST, MCHTTPMethodPUT, MCHTTPMethodHEAD, MCHTTPMethodPATCH, MCHTTPMethodDELETE }; //这个类是对请求的封装,在实际发出请求之前,按照设计,都在这个类处理 /** * 设计的过程是 写请求(包括配置) -> 发请求 -> 得到相应(数据) */ @interface MCURLRequest : NSObject ///--------------------------------------- /// Initialization ///--------------------------------------- /* * Customization of MCURLRequest occurs during creation of a new URLRequest. * If you only need to use the convenience routines with custom * configuration options it is not necessary to specify a delegate. * If you do specify a delegate, the delegate will be retained until after * the delegate has been sent the URLSession:didBecomeInvalidWithError: message. 这里需要调用afn的didBecomeInvalidWithError 然后释放delegate */ + (instancetype)URLRequestWithConfiguration:(MCURLSessionConfiguration *)configuration; + (instancetype)URLRequestWithConfiguration:(MCURLSessionConfiguration *)configuration delegate:(nullable id )delegate delegateQueue:(nullable NSOperationQueue *)queue; @property (nonatomic, readonly, retain) NSOperationQueue *delegateQueue; @property (nonatomic, nullable, retain) id delegate; @property (nonatomic, copy) MCURLSessionConfiguration *configuration; ///--------------------------------------- /// Parameters ///--------------------------------------- // 参数,有字典,url,, nsdate ,流, 反正式afn提供的。 @property (nonatomic, copy, nullable) NSString *url; @property (nonatomic, copy, nullable) NSDictionary *parameterDict; @property (nonatomic, assign) MCHTTPMethod HTTPMethod; @property (nonatomic, assign, getter=isCacheResponse) BOOL cacheResponse; // 跟上传相关 @property (nonatomic, strong, nullable) NSData *data; @property (nonatomic, copy, nullable) NSString *fileURL; @property (nonatomic, strong, nullable) NSInputStream *inputStream; @property (nonatomic, copy, nullable) NSString *fileName; @property (nonatomic, copy, nullable) NSString *name; @property (nonatomic, copy, nullable) NSString *mimeType; @property (nonatomic, assign) int64_t length; ///--------------------------------------- /// Load Datas ///--------------------------------------- - (void)fetchDataWithMethod:(MCHTTPMethod)method completionHandler:(void (^)(MCURLResponse *response))handler; - (void)fetchDataWithMethod:(MCHTTPMethod)method progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress completionHandler:(void (^)(MCURLResponse *response))handler; ///--------------------------------------- /// Upload Datas ///--------------------------------------- - (void)uploadDataWithCompletionHandler:(void (^)(MCURLResponse *response))handler; - (void)uploadDataWithProgress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress completionHandler:(void (^)(MCURLResponse *response))handler; @end NS_ASSUME_NONNULL_END