2017-02-13 9 views
1

데이터를 다운로드하기위한 NSObject 클래스 'DataDownload_A'가 있습니다. 내부 NSURLSession 및 NSURLSessionTask를 사용합니다. 이제 문제는이 객체를 nil로 설정하면 dealloc이 호출되지 않는다는 것입니다.NSURLSessionTask 이력서가 호출되면 Object dealloc이 호출되지 않습니다.

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]; 

그리고 마지막 두 라인 주석 경우 : 여기 DataDownload_A 세그먼트 코드는 'self.task = self.session의 dataTaskWithRequest을 : theRequest];' 및 '[self.task resume];', dealloc이 호출됩니다. 그러므로 나는 그것을 사용할 때 몇 가지 문제가 있다고 가정한다. 나는 '[self.task cancel]', 'self.task = nil', '[self.session invalidateAndCancel];'을 호출하려고했습니다. 및 '[self.session resetWithCompletionHandler : nil];' 내 객체를 nil로 설정하기 전에. 그러나 도움이되지 않았다.

아무도 내가 만든 실수를 알고 있습니까 ?? 나에게 알려 줘서 고마워. 미리 감사드립니다.

+0

흠, 내 대답을 삭제했지만 귀하의 [task cancel] 및 task = nil이 dealloc을 호출해야하지만, 귀하의 "DataDownload_A"에 대한 강력한 참조를 유지하고있는 것으로 보입니다. "DataDownload_A"호출자에 대한 코드를 게시해야합니다. –

+0

감사합니다. 좀도둑. 나는 그것을 시도 할 것이다. –

답변

2

URLSession에는 대리인에 대한 강력한 참조가있는 것 같습니다. 나는 URLSession에 문서에서이 줄을 발견

중요 : 세션 객체는 앱이 명시 적으로 세션을 무효화 할 때까지 대리자 에 강한 참조를 유지합니다. 세션을 무효화하면 앱에 메모리가 누출됩니다.

그 비트가 URLSession이 무효화 나 앱이 종료 될 때까지이 설정 년대 순간부터 그 위임에 대한 강한 참조를 보유 것처럼 들릴 수 있지만, 그것은 단지 강한 참조를 생성하는 수 있습니다 때 데이터 (또는 기타) 타스크가 시작됩니다.

위임을 해제하려면 URLSession을 무효화해야하는 것처럼 들립니다. Xcode의 URLSession 문서에서 해당 텍스트를 검색하는 것이 좋습니다. "invalidate"에 대해서도 검색하십시오

+0

안녕하세요 던컨 C .. 당신의 대답은 내 문제를 해결하기에 아주 가깝고 내 세션 변수를 확인하라고 영감을주었습니다. 제 세션을 무효로 설정하기 전에 세션을 무효화했는데 내 세션은 '보유'로 설정되어 있습니다. 그래서 'strong'으로 다시 설정하면 .. dealloc으로 작동합니다. 고맙습니다. –