第一种方案:把该manager封装成单例
解决理由:内存中的某一块固定的地址就用来存放manager,专门用来网络请求和释放
问题:很明显,同一时刻只能有一个网络请求。异步会有问题。当两个线程同时申请manager对象时,肯定有一个manager申请不到,无法网络请求
第二种方案:在网络请求的block内把task取消掉
无论是success,还是failure的回调都取消掉,当然在block外部需要弱化一下manager对象
__weak typeof(manager) weakManager = manager;
然后在两个回调方法里加上
[weakManager invalidateSessionCancelingTasks:YES];
推荐第二种,封装在某个网络请求基类里,或者每次网络请求结束都写上。
完美解决了用leaks检测出来的内存泄漏问题。
网友评论