你好,我是Emma,今天开启六脉神剑之Alamofire的技能书。至于为什么开启这个技能书,原因是它是Swift中的AFN,而且是纯粹版AFN,其优点简洁易用已推广。完美。废话不多说开始。
###1. 纯原生无框架网络请求示例
基本思路:切入点是URLSession:
1.创建URLSession会话;
2.通过URL来创建datatask任务;
3.resume()
[外链图片转存失败(img-gahIfhRH-1565956664014)(images/urlsession.png)]
default:在沙盒中有持久缓存用以缓存证书等文件。
ephemeral(短暂的):没有持久缓存。
background:后台下载默认是挂起的。
###2. 网络性能的带宽处理基本思路:
1.开启后台权限;
2.下载结束后通知后台,目的是便于后台结束这个进程提高再次进入这个APP进程时的性能;
3.分段进行网络传输。
###3. TCP的握手与挥手
[外链图片转存失败(img-qroqEvKh-1565956664016)(images/urlsession.png)]
情景回放:
A:我可以和你聊天吗?
B:可以啊。
A:你好美。。
[外链图片转存失败(img-EacVgh1b-1565956664016)(images/urlsession.png)]
情景回放:
B: 我们各自撤了吧。
A:我看行。
A:但是还有工作内有做完,做完再撤吧。
B:嗯好吧。
看了上面的图那么疑惑来了,为什么握手是三次,但是挥手是四次来?
我的理解是这是由服务器和客户端两者传输数据的硬件条件决定的,握手很容易之前没有进行过合作,不存在数据处理没有完成的问题,但是结束合作就要考虑还有没有完成的项目的问题。
这个思想在我们编写代码的内部也有很好的类比的诠释,这一点让我想起了RXSwift中的销毁和开始使用的时候,是先制空变量还是先进行方法调用的问题。开始使用的时候,先制空再开始调用方法,而销毁的时候是先调用销毁的方法在进行制空。
###4.Alamofire的基本使用
基本使用代码
Alamofire.request(urlStr)
.responseJSON { (response) in
print(response)
}
从上面的代码和之前我们写的纯原生无框架网络的请求来对比可以看出,使用这个框架可以非常简洁的进行网络请求,该框架使用了链式语法很简洁且易于开发,传入和传出也是很简单明了,传入直接可以传str,传出可以直接返回json数据。这种编程框架的设计思想很大程度上简化了开发者的进行框架使用时的代码行数。
既然框架这么好用那么其实现的基本原理是什么呢?
协议拓展就是不可缺少的。
有Alamfire名直接提供接口的模式可以叫装饰模式,
还有就是对单例进行简单的封装使用Alamfire进行方法的调用,而不是用sessionmanage.default这样的单例,这样写的优点是更简洁明了了。