AFNetworking 内存泄漏

AFNetworking memory leak

我使用下面的代码开始下载

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];

报内存泄漏,我检查了上面的代码,但没有发现任何错误的地方,

欢迎您的评论

您有两个指针,一个指向 downloadManager1,一个指向 NSURL 对象。根据您的代码中调用它的位置,我怀疑存在对一个或另一个的永久 strong 引用。尝试将 NSURL 从指针转换为实际对象,它会按值复制,并检查以确保 downloadManager 在工作完成后被释放。

我认为泄漏发生在您创建管理器时。 NSURLSession 保留对委托的引用。 如果您只初始化和存储管理器一次,它可能会有所帮助。我不确定你的数据任务代码被调用了多少次。

结帐https://github.com/AFNetworking/AFNetworking/issues/3787

invalidateSessionCancelingTasks:

This is known and documented behavior. When you're finished with a session, call invalidateSessionCancelingTasks:. This is not an issue for most apps, which keep a single session for the lifetime of the application.

https://github.com/AFNetworking/AFNetworking/issues/1528#issuecomment-26887778