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

Do I need to release object using delegate?

我有一个没有 ARC 的任务要做。以前没用过(最近开始研究ios开发)。我有一个代表http请求的class,它符合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);
    });

}

现在的问题是:上一个方法结束时是否需要释放session、下载任务和位置url?或者它会为我完成?我问这个是因为我在第一种方法中创建了它(url除外),据我了解负责释放对象的人也是我。谢谢!

Golden Rule很简单。你说的是 alloc 还是 copy 还是 retain?不?那么你就不需要说release(你一定不能这样做)。

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