AFNetWorking 内存泄漏的问题 -- AFHTTPSessionManager --Instruments体检结果分享

来源:互联网 发布:云计算工程师要学什么 编辑:程序博客网 时间:2024/05/01 08:52



今天用Instruments对APP做了下体检,结果如下:

1、CPU占用最大的一个加载动画,原因是这个加载动画用到了CoreGraphics核心绘图中的transform,不断改变UIView的形状,发现这个绘制还是很占CPU的,以后这种动画还是得慎用,影响APP性能;

2、虚拟内存的使用最大的是SDWebImage,可能本身我们的APP就图片内容最多;

3、内存泄漏问题:发现用到AFHTTPSessionManager的地方发生了很大的内存泄漏,每一次网络请求都会报错,而且都会一把很大的❌(如上图),就在网上搜索一下了,并进行了总结。原因是每次网络请求的时候都重新

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

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

static AFHTTPSessionManager *manager;

+ (AFHTTPSessionManager *)sharedManager {
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 初始化请求管理类
        manager = [AFHTTPSessionManager manager];
        manager.requestSerializer = [AFJSONRequestSerializer serializer];
        
        // 设置15秒超时 - 取消请求
        manager.requestSerializer.timeoutInterval = 15.0;
        // 编码
        manager.requestSerializer.stringEncoding = NSUTF8StringEncoding;
        // 缓存策略
        manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
        
        manager.responseSerializer = [AFJSONResponseSerializer serializer];
        // 支持内容格式
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/plain", @"text/javascript", @"text/json", @"text/html", nil];
    });
    return manager;
    
}


使用的时候就如下一句代码即可

AFHTTPSessionManager *manager = [ZLHttpTool sharedManager];

1 0
原创粉丝点击