我使用下面的代码开始下载
AFURLSessionManager *downloadManager1 = [[AFURLSessionManager alloc] initWithSessionConfiguration:NSURLSessionConfiguration.defaultSessionConfiguration];
NSURLSessionDownloadTask *downloadTask;
downloadTask=[downloadManager1 downloadTaskWithRequest:request progress:nil
destination:^NSURL *(NSURL *targetPath, NSURLResponse *response){
NSURL *aURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [aURL URLByAppendingPathComponent:[response suggestedFilename]];
}completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
}
];
[downloadTask resume];
它报告了内存泄漏,我检查了上面的代码但是找不到任何地方是错的,
您的评论欢迎
invalidateSessionCancelingTasks:
这是已知和记录的行为。完成会话后,调用invalidateSessionCancelingTasks:。对于大多数应用程序而言,这不是问题,这些应用程序在应用程序的生命周期内保留单个会话。
https://github.com/AFNetworking/AFNetworking/issues/1528#issuecomment-26887778
你有两个指针,一个是downloadManager1
,另一个是NSURL
对象。根据代码中调用的位置,我怀疑有一个永久性的strong
引用其中一个。尝试将NSURL
从指针转换为实际对象,它将按值复制,并检查以确保在工作完成时释放downloadManager
。
我认为在创建经理时会发生泄漏。 NSURLSession保留对委托的保留引用。如果您只管理一次管理器,它可能会有所帮助。我不确定您的数据任务代码被调用了多少次。