使用AFNetworking 3 内存泄露

在使用instruments做内存泄漏分析时,发现所有使用如下语句的地方都有内存泄漏,OMG:

    if (!_manager) {
        _manager = [AFHTTPSessionManager manager];
    }

stack overflow上查了下并没有找到好的解决方案,去github的AFN的issue区查了下,确实有几个人提问了,但是每人给出解决方案。
这里写图片描述
这里写图片描述

没人解决就算了,结果这货自己莫名其妙没泄漏了,不继续探究为什么上次有内存泄漏。

这里写图片描述

无奈只能找度娘了,还好找到了解决办法,有前辈给出了解决方案:

这里写图片描述

但是我所用到的网络请求不是很复杂,不想再新建类去写单例了,就把单例放在了AppDelegate中,用到的时候在通过AppDelegate拿。因为需要用到AFHTTPSessionManager和AFURLSessionManager,所以就各写一个单例方法。

static AFHTTPSessionManager *manager ;
static AFURLSessionManager *urlsession ;

-(AFHTTPSessionManager *)sharedHTTPSession{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [AFHTTPSessionManager manager];
        manager.requestSerializer.timeoutInterval = 10;
    });
    return manager;
}

-(AFURLSessionManager *)sharedURLSession{
    static dispatch_once_t onceToken2;
    dispatch_once(&onceToken2, ^{
        urlsession = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    });
    return urlsession;
}

获得AFHTTPSessionManager和AFURLSessionManager单例

//AFHTTPSessionManager
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
AFHTTPSessionManager *manager = [app sharedHTTPSession];

//AFURLSessionManager
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
AFURLSessionManager *urlsession = [app sharedURLSession];

全部替换完之后再用 instruments跑一遍,再也没有红叉了 ^_^ 。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值