我有一个NSObject类“DataDownload_A”来下载数据。在内部,我使用NSURLSession和NSURLSessionTask。现在的问题是,当我将这个对象设置为零时,就不会调用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简历;’,那么dealloc将被调用。因此,我认为当我使用它们时,一定会有一些问题。在将对象设置为零之前,我尝试调用“self.task cancel”、“self.task= nil”、“self.session invalidateAndCancel;”和“self.session resetWithCompletionHandler:nil;”。但没起作用。
有人知道我犯了什么错吗??会很感激你告诉我的。提前谢谢你。
发布于 2017-02-13 04:12:35
看起来,URLSession对它的委托有很强的引用。我在URLSession上的文档中找到了这一行
重要:会话对象保持对委托的强烈引用,直到应用程序显式地使会话无效。如果不使会话无效,则应用程序会泄漏内存。
这一点使它听起来就像一个URLSession从它被设置到失效或者你的应用程序被终止的那一刻起就对它的委托有很强的引用,但是它可能只在数据(或其他)任务启动时才创建一个强引用。
听起来,您需要使URLSession失效,才能让它释放它的委托。我建议在Xcode中的URLSession文档中搜索该文本。也可以搜索“无效”
https://stackoverflow.com/questions/42196169
复制相似问题