继承YTKRequest写自己的 具体请求类
发出请求是通过方法:startWithCompletionBlockWithSuccess 这个方法在YTKBaseRequest中
方法中给 request的两个block属性赋值
self.successCompletionBlock = success;
self.failureCompletionBlock = failure;
接着调用 start方法
在YTKBaseRequest基类中的start方法中:首先调用toggleAccessoriesWillStartCallBack方法告知 附件 请求将要开始,接着通过[YTKNetworkAgent sharedAgent]添加请求
YTKNetworkAgent类addRequest方法对请求做了处理,并且在方法的最后通过resume方法发起请求
在addRequest中
1 - (NSURLSessionTask *)sessionTaskForRequest:(YTKBaseRequest *)request error:(NSError * _Nullable __autoreleasing *)error
2 - (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
requestSerializer:(AFHTTPRequestSerializer *)requestSerializer
URLString:(NSString *)URLString
parameters:(id)parameters
error:(NSError * _Nullable __autoreleasing *)error
3 - (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
requestSerializer:(AFHTTPRequestSerializer *)requestSerializer
URLString:(NSString *)URLString
parameters:(id)parameters
constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block
error:(NSError * _Nullable __autoreleasing *)error
4 dataTask = [_manager dataTaskWithRequest:request
completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *_error) {
[self handleRequestResult:dataTask responseObject:responseObject error:_error];
}];
5 在[self handleRequestResult:dataTask responseObject:responseObject error:_error];这个方法中 利用
succeed = [self validateResult:request error:&validationError];
id validator = [request jsonValidator];这里就是对返回类型的验证
在YTKRequest中start方法中:通过属性ignoreCache判断是否忽略缓存,如果要为YES则调用startWithoutCache方法,在这个方法中调用clearCacheVariables清空所有的缓存数据,然后调用父类的start
如果属性resumableDownloadPath不空,则也清空缓存
如果loadCacheWithError方法返回NO,则也清空缓存
否则:_dataFromCache = YES; 注意loadCacheWithError方法中判断了 缓存是否存在