1.参考:https://www.aliyun.com/jiaocheng/367496.html
2.参考:AFNetWorking的文档
AFNetWorking的基本使用//待续...
1.我们比对系统版本号的时候经常使用
https://www.jianshu.com/p/a86310ca9913
NSString *version= [UIDevice currentDevice].systemVersion;但是,苹果其实已经给你宏定义好了在
NSFoundationVersionNumber
2.
UIRefreshControl
下拉刷新我们一直差不多都是用的MJRefresh,但是苹果也提供了一种就是UIRefreshControl,之前的话也就是在UITableviewController上面能用,但是在ios10之后在scroll,tableview等也提供了原生的下拉加载方式,更加的简洁美观,很“苹果”
3.NSProgress 进度
4.AFNetWorking基于NSUrlSession封装了AFURLSessionmanager和AFHTTPSessionManager两个库
1)使用AFNetWorking AFURLSessionmanager下载/上传
2)AFHTTPSessionManager是AFURLSessionmanager的子类
看了一下,也没啥意思,上面的链接已经足够了,有时间可以看一下吧,当然有的时候面试被问到了,也可以在调研下。
我的大概理解
static dispatch_queue_t url_session_manager_creation_queue() {
static dispatch_queue_t af_url_session_manager_creation_queue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL);
});
return af_url_session_manager_creation_queue;
}
static void url_session_manager_create_task_safely(dispatch_block_t block) {
if (NSFoundationVersionNumber < NSFoundationVersionNumber_With_Fixed_5871104061079552_bug) {
// Fix of bug
// Open Radar:http://openradar.appspot.com/radar?id=5871104061079552 (status: Fixed in iOS8)
// Issue about:https://github.com/AFNetworking/AFNetworking/issues/2093
dispatch_sync(url_session_manager_creation_queue(), block);
} else {
block();
}
}
url_session_manager_create_task_safely
这个只执行依次类似于单例的队列,主要是为了解决ios8 的bug,应该是为了保证线程安全
[self addDelegateForDataTask:dataTask uploadProgress:uploadProgressBlock downloadProgress:downloadProgressBlock completionHandler:completionHandler];
- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate
forTask:(NSURLSessionTask *)task
- (void)setupProgressForTask:(NSURLSessionTask *)task
创建任务并开启任务
创建类,并将
@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler
@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading;
@property (nonatomic, copy) AFURLSessionTaskProgressBlock uploadProgressBlock;
@property (nonatomic, copy) AFURLSessionTaskProgressBlock downloadProgressBlock;
创建
AFURLSessionManagerTaskDelegate类,实现NSURLSession代理,监听接口返回的结果,并将数据利用以上的block返回至接口.
load方法中实现动态的方法交换。(runtime已经好几年了,估计开发人员或多或少都懂得)
AFNetworking其实还有很多功能,例如支持https,我们公司使用的是苹果的allAllowLoads,所以就不多说了