我是否需要使用委托释放对象?

时间:2017-08-27 21:05:02

标签: ios objective-c automatic-ref-counting

我有一项没有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),据我所知,负责释放对象的人也是我。谢谢!

1 个答案:

答案 0 :(得分:0)

Golden Rule非常简单。您是说alloc还是copy还是retain?没有?那么你不需要说release(你不能这样做)。

(出于这个原因,您需要释放urlrequest,而您正在这样做。所以内存管理现已完成。)