ios - 如果调用 NSURLSessionTask resume 则不调用对象 dealloc

标签 ios nsurlsession dealloc

我有一个用于下载数据的 NSObject 类“DataDownload_A”。在里面我使用 NSURLSession 和 NSURLSessionTask。现在的问题是当我将此对象设置为 nil 时,不会调用 dealloc。这是DataDownload_A的一段代码:

    NSString *urlString = [self URL];
    NSURL *url               = [NSURL URLWithString:urlString];
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:url
                                                cachePolicy:NSURLRequestUseProtocolCachePolicy
                                            timeoutInterval:60.0];

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

    self.session = [NSURLSession sessionWithConfiguration:configuration
                                                 delegate:self
                                            delegateQueue:nil];
    self.receivedData = [NSMutableData data];

    self.task = [self.session dataTaskWithRequest:theRequest];
    [self.task resume];

如果我评论最后两行'self.task = [self.session dataTaskWithRequest:theRequest];'和'[self.task resume];',将调用dealloc。因此,我认为在使用它们时一定存在一些问题。我试图调用'[self.task cancel]'、'self.task = nil'、'[self.session invalidateAndCancel];'和'[self.session resetWithCompletionHandler:nil];'在我将对象设置为零之前。但没有帮助。

那么有人知道我犯了什么错误吗?让我知道将不胜感激。先感谢您。

最佳答案

它看起来像 URLSession强烈引用其代表。我在 URLSession 上的文档中找到了这一行:

Important: The session object keeps a strong reference to the delegate until your app explicitly invalidates the session. If you do not invalidate the session, your app leaks memory.



这一点听起来像是一个 URLSession 从它设置的那一刻起一直持有对其委托(delegate)的强引用,直到它失效或您的应用程序被终止,但它可能只是在数据(或其他)任务被终止时才创建强引用开始了。

听起来您需要使 URLSession 无效才能使其释放它的委托(delegate)。我建议在 URLSession 中搜索该文本Xcode 中的文档。也搜索“无效”

关于ios - 如果调用 NSURLSessionTask resume 则不调用对象 dealloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42196169/

相关文章:

ios - Swift UIScrollView 在没有 pagingEnabled 的情况下捕捉到 subview 宽度

ios - 你怎么知道 NSURLSession 对象何时被 iOS 失效了?

ios - (NSURLSessionDownloadTask cancelByProducingResumeData) 崩溃 nsnetwork 守护进程 iOS 7.0

ios - NSURLSession 完成处理程序非常慢

objective-c - 为什么将正在重新分配的对象设置为弱属性会导致崩溃

ios - dealloc 问题后的 dispatch_after

ios - dismissViewControllerAnimated 不会释放 viewcontroller

ios - 将 Nib 加载到 View 时崩溃

ios - clang:错误:尝试运行应用程序时没有这样的文件或目录

iOS核心数据: Fetch child Magical Record data