如何修复 AFNetworking 3.1 中的内存泄漏?

Posted

技术标签:

【中文标题】如何修复 AFNetworking 3.1 中的内存泄漏?【英文标题】:How to fix memory leak in AFNetworking 3.1? 【发布时间】:2016-07-11 11:53:07 【问题描述】:

我正在仪器中测试应用程序,因此下面的代码出现内存泄漏。请告诉我如何解决它。

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:configuration];

【问题讨论】:

是的,AFNetworking 框架中存在一些内存泄漏,您可以在方法结束时将“manager”对象设为 nil。因此,当应用再次请求它时,它将再次创建新的 @suhas 请检查我的答案。并请给予回应。 【参考方案1】:

我不知道我是否迟到了,但我为那些碰到这个的人回答。这是预期的行为。完成会话后,您需要调用此invalidateSessionCancelingTasks:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
self.manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

__weak typeof(self) welf = self;
[self.manager uploadTaskWithRequest:request fromFile:filePath progress:^(NSProgress * _Nonnull uploadProgress) 
    // progress block
 completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) 
    //Invalidate Session here
    [welf.manager invalidateSessionCancelingTasks:YES];
    // stuff needed to be done
];

【讨论】:

[welf.manager invalidateSessionCancelingTasks:YES];这里有什么好处?【参考方案2】:

你可以试试这个代码:

static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^

        NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
        sessionConfiguration.HTTPMaximumConnectionsPerHost = 10;
         self.manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:sessionConfiguration];
);

【讨论】:

以上是关于如何修复 AFNetworking 3.1 中的内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

ios json 解析与 afnetworking

使用 AFNetworking 2.3.1 的自签名 SSL 证书

如何清除 AFNetworking 中的旧缓存?

AFNetworking 2.0 中的 AFHTTPRequestOperationManager 如何传递 HTTPBody 标签

使用 Bootstrap 3.1 修复 Firefox 文件输入?

如何删除 AFNetworking 中的 http 标头选项?