我是否需要使用委托释放对象?
问题描述:
我有一个任务没有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];
}
创建网址会话并启动下载任务。我负责的任务结果在下面的方法:
-(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),并且据我了解,负责释放对象的人也是我。谢谢!
答
Golden Rule非常简单。你说alloc
或copy
或retain
?没有?那么你不需要说release
(你不能这样做)。
(你需要释放url
和request
出于这个原因,你正在这样做。所以,内存管理现在已经完成。)
这是更好,如果你有downloadTask作为属性或数组或者一些引用它,所以你可以取消它,如果你也需要它等 – 2017-08-27 22:46:53