背景:做完了一个项目后,当然就要跑一下Instruments工具的Leaks功能,检查一下App有没有出现内存泄露的问题。结果,原以为不会这么容易就出现内存泄露的问题,一下就出现了好几个红叉。只能很捉急地去找问题答案了……
一般来说,使用AFNetworking3.x 很容易就是用了[AFHTTPSessionManager manager]类方法来获取AFHTTPSessionManager实例(不知道别人是怎么获取,之前我就是这么获取的):
manager这个类方法很容易导致出现内存泄露:
会很明显的看到[AFHTTPSessionManager manager]出现,双击该行,进去会定位到源代码位置:
manager类方法的实现可以看到,每一次返回的是一个实例分配内存和初始化的过程,也就是每一次网络请求都是一次初始化一个实例,并且该实例没有得到释放,导致了出现内存泄露。
重新查看了一下AFNetworking的DEMO,会发现作者并不是直接调用manager这个类方法(就有点想不明白manager有什么作用),而是通过创建一个继承AFHTTPSessionManager的单例实例AFAppDotNetAPIClient,通过这个实例来调用请求方法。
再次使用Leaks功能进行检测,很高兴,没有出现内存泄露问题。如果在使用第三方库出现什么问题,其实看一下作者写的Demo或者是issue集,都能找到答案。感谢开源项目的大牛们
网友评论