网络请求单例类

首先,我们先说明一下为什么要封装网络请求的单例类:
用instruments测试项目内存的时候突然发现了大量的内存泄漏,并且都指向AFN,发现使用AFHTTPSessionManager的地方都出现了内存泄漏,上网查资料发现跟踪AFHTTPSessionManager的实例manager,在请求实例dealloc后,其中的manager的确没有被释放。NSURLSession的代理是强引用,如果不主动调用废弃操作,会有内存泄露。
参考资料:AFN为什么会内存泄漏
所以需要将AFHTTPSessionManager封装成单例类

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

@implementation YSSAFHTTPSessionManager

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

之后再用instruments测试,发现完全没有内存泄漏了~

你可能感兴趣的:(网络请求单例类)