【发布时间】:2026-01-28 12:10:01
【问题描述】:
我有一个用于下载数据的 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];'在我将对象设置为零之前。但没有帮助。
那么有人知道我犯了什么错误吗?让我知道将不胜感激。先感谢您。
【问题讨论】:
-
嗯,我删除了我的答案,但是您的 [task cancel] 和 task = nil 应该调用 dealloc ,但似乎您可能还有其他东西保持对“DataDownload_A”的强烈引用,您应该为您的“DataDownload_A”调用者发布代码。
-
谢谢。潜行。我会试试的。
标签: ios nsurlsession dealloc