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 保留对委托的引用。
如果您只初始化和存储管理器一次,它可能会有所帮助。我不确定你的数据任务代码被调用了多少次。
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
我使用下面的代码开始下载
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 保留对委托的引用。 如果您只初始化和存储管理器一次,它可能会有所帮助。我不确定你的数据任务代码被调用了多少次。
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