我有一项没有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),据我所知,负责释放对象的人也是我。谢谢!
答案 0 :(得分:0)
Golden Rule非常简单。您是说alloc
还是copy
还是retain
?没有?那么你不需要说release
(你不能这样做)。
(出于这个原因,您需要释放url
和request
,而您正在这样做。所以内存管理现已完成。)