首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果调用NSURLSessionTask简历,则不调用dealloc对象。

如果调用NSURLSessionTask简历,则不调用dealloc对象。
EN

Stack Overflow用户
提问于 2017-02-13 03:19:44
回答 1查看 579关注 0票数 1

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

代码语言:javascript
复制
    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简历;’,那么dealloc将被调用。因此,我认为当我使用它们时,一定会有一些问题。在将对象设置为零之前,我尝试调用“self.task cancel”、“self.task= nil”、“self.session invalidateAndCancel;”和“self.session resetWithCompletionHandler:nil;”。但没起作用。

有人知道我犯了什么错吗??会很感激你告诉我的。提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-13 04:12:35

看起来,URLSession对它的委托有很强的引用。我在URLSession上的文档中找到了这一行

重要:会话对象保持对委托的强烈引用,直到应用程序显式地使会话无效。如果不使会话无效,则应用程序会泄漏内存。

这一点使它听起来就像一个URLSession从它被设置到失效或者你的应用程序被终止的那一刻起就对它的委托有很强的引用,但是它可能只在数据(或其他)任务启动时才创建一个强引用。

听起来,您需要使URLSession失效,才能让它释放它的委托。我建议在Xcode中的URLSession文档中搜索该文本。也可以搜索“无效”

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42196169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档