title: AFN为什么添加一条常驻线程
date: 2017-05-04 15:01:43
tags:
今天早上看到一个很好的面试题.作为渣渣的我很想尝试这自己捋清楚答案~
这个问题可以分为两个部分回答
1为什么要添加一个不退出的线程
2为什么只添加了一个线程
只不过水平有限,无法完全回答. 最后在 [BS大神这里](http://www.jianshu.com/p/10121d699c32#) 找到了答案
AFN 的做法是把网络请求的发起和解析都放在同一个子线程中进行,但由于子线程默认不开启 runloop,它会向一个 C语言程序那样在运行完所有代码后退出线程。而网络请求是异步的,这会导致获取到请求数据时,线程已经退出,代理方法没有机会执行。因此,AFN 的做法是使用一个 runloop 来保证线程不死~
然而频繁的创建线程并启动runloop肯定会造成内存泄露(runloop 无法停止.线程无法退出)
所以AFN就创建了一个单例线程,并且保证线程不退出~