使用xcode工具instruments 的leak 来动态检查内存泄漏,出现了AFN导致的错误,基本都是AFHTTPSessionManager类导致的
第一种方法 https://www.cnblogs.com/zhangshan/p/5313010.html
重写AFHTTPSessionManager单例 然后在封装的网络请求里面吧static AFHTTPSessionManager *afnManager = nil; 加上 替换了 AFHTTPSessionManager * manager=[AFHTTPSessionManager manager]
/**
* 创建单例
*
* @return <#return value description#>
*/+ (DataManager *)manager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[DataManager alloc] init];
afnManager = [AFHTTPSessionManager manager];
afnManager.responseSerializer = [AFHTTPResponseSerializer serializer];
});
return manager;
}
//POST请求- (void)postDataWithUrl:(NSString *)url parameters:(NSDictionary *)paramters success:(Success)success failure:(Failure)failure {
[afnManager POST:url parameters:paramters progress:nil success:^(NSURLSessionDataTask * _Nonnull task,id _Nullable responseObject) {
if (responseObject) {
success([[self class] handleResponseObject:responseObject]);
}else {
[[self class] showAlertViewWithMessage:@"暂无数据"];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (error) {
[[self class] showAlertViewWithMessage:@"服务器出错了~~~~(>_<)~~~~"];
failure(error);
}
}];
}
第二中方法 https://www.cnblogs.com/iicecream/p/7130946.html
代码如下
.h头文件中
#import "AFNetworking/AFNetworking.h"
/**
* 单利方法
*
* @return 实例对象
*/
+(AFHTTPSessionManager*)shareManager;
.m文件中
#pragma mark - shareManager
/**
* 获得全局唯一的网络请求实例单例方法
*
* @return 网络请求类的实例
*/
+(AFHTTPSessionManager *)shareManager {
static AFHTTPSessionManager *manager=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = AFHTTPSessionManager manager];
});
return manager;
}
完毕
使用查内存泄漏的大概步骤:更改成relese环境,然后打开工具,点击红色圆圈右侧的 选中你要测试的app,然后点击 红圈开始,第二模块下面有个正方形的按钮 选calltree, 最下面还有一个calltree,选中separ.... by thread 和hide sys 然后就出来了 具体代表什么度娘呗。一个是线程 一个是隐藏系统的。