AFNetWorking 第三方解读,以及一些实战的感悟

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,所以就不多说了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值