我需要使用委托释放对象吗?
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
(你一定不能这样做)。
(出于这个原因,您需要释放 url
和 request
,并且您正在这样做。内存管理现已完成。)
我有一个没有 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
(你一定不能这样做)。
(出于这个原因,您需要释放 url
和 request
,并且您正在这样做。内存管理现已完成。)