如何修复 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 中的内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章