AFNetworking 内存泄漏及其解决办法

本文介绍如何通过将AFHTTPSessionManager设为单例解决iOS应用中的内存泄漏问题。作者发现多次实例化导致内存泄漏,并通过调整实现了资源的有效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天闲着没事,利用 Xcode 的 Instruments中 leaks 工具检查了一下项目内存泄漏情况。高高兴兴来检查,mmp,第一个是绿✘,其他都是 ❌,蒙蔽了。这些❌ 都是内存泄漏。OK ,重头开始。 我想大家对这个工具也不陌生了.都会怎么使用了吧,我发现 callTree 基本都是Af报的内存泄漏,在网看了好多资料。看了一下源码,原来是我们每次网络请求是都会调用:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer];

创建了一下,导致接口请求完之后一直没有得到释放。最后把AFHTTPSessionManager这个对象我做成了单例的,也就是每次请求接口的时候都是用的一个manager。改完之后调试OK,之前的❌都不见了。还是有效果的,下面把单例创建的代码贴一下,记录一下。

#import "JYJHTTPTool.h"
static AFHTTPSessionManager *manager;


+(AFURLSessionManager *)sharedManager {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [AFHTTPSessionManager manager];
        manager.requestSerializer = [AFHTTPRequestSerializer serializer];
        // 缓存策略
        manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
        //设置超时时间
        [manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
        manager.requestSerializer.timeoutInterval = 30.f;
        [manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
        // 4. 设置响应数据类型
        
        [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", @"application/javascript",@"image/jpeg", @"text/vnd.wap.wml", @"application/x-javascript",@"image/png", nil]];
        [manager.requestSerializer setValue:@"application/x-www-form-urlencoded;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    });
    return manager;
    
}
复制代码

然后在自己的网络封装里面把 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 换成 AFHTTPSessionManager *manager = [JYJHTTPTool sharedManager];就OK啦! ❌没了。有问题可以大家一起讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值