У меня есть класс NSObject 'DataDownload_A' для загрузки данных. Внутри я использую NSURLSession и NSURLSessionTask. Теперь проблема заключается в том, что когда я устанавливаю этот объект в nil, dealloc не будет вызываться. Вот фрагмент кода из DataDownload_A:Объект dealloc не вызывается, если NSURLSessionTask резюме вызвано
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. –
спасибо. Скрытность. Я попробую. –