簡體   English   中英

我需要使用委托釋放對象嗎?

[英]Do I need to release object using delegate?

沒有ARC,我有一個任務要做。 以前我沒有使用過(最近開始研究ios開發)。 我有一個代表http請求的類,它符合NSURLSessionDownloadDelegate協議。 而且我有以下代碼:

-(void)executeWithRelativeUrl:(NSString *)relativeUrl andSuccessBlock: (void(^) (NSData*))successBlock {
    NSURL *url = [[NSURL alloc] initWithString:relativeUrl relativeToURL:self.baseUrl];
    [self setSuccessBlock:successBlock];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil];
    NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request];
    [downloadTask resume];

    [request release];
    [url release];
}

創建url會話並開始下載任務。 我正在通過以下方法處理任務結果:

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
    NSData *data = [NSData dataWithContentsOfURL:location];

    dispatch_async(dispatch_get_main_queue(), ^{
        self.successBlock(data);
    });

}

現在的問題是:我是否需要在最后一種方法的末尾釋放會話,下載任務和位置url? 還是會為我完成? 我問這個問題是因為我是在第一種方法中創建的(URL除外),據我了解,負責釋放對象的人也是我。 謝謝!

黃金法則很簡單。 您是說alloc還是copyretain 沒有? 然后,您無需說release (也不必這樣做)。

(由於這個原因,您需要釋放urlrequest ,並且您正在這樣做。因此,內存管理現已完成。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM