Ios 是否需要使用委托释放对象?
没有ARC我有一项任务要做。以前我没有使用它(最近开始研究ios开发)。我有一个表示http请求的类,它符合NSURLSessionDownloadDelegate协议。我还有以下代码:Ios 是否需要使用委托释放对象?,ios,objective-c,automatic-ref-counting,Ios,Objective C,Automatic Ref Counting,没有ARC我有一项任务要做。以前我没有使用它(最近开始研究ios开发)。我有一个表示http请求的类,它符合NSURLSessionDownloadDelegate协议。我还有以下代码: -(void)executeWithRelativeUrl:(NSString *)relativeUrl andSuccessBlock: (void(^) (NSData*))successBlock { NSURL *url = [[NSURL alloc] initWithString:rela
-(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?否则我就完了?我这样问是因为我在第一个方法中创建了它(url除外),据我所知,负责释放对象的人也是我。谢谢 方法非常简单。你说的是alloc
还是copy
还是retain
?不那么您就不需要说release
(您也不能这么做)
(出于这个原因,您需要释放url
和请求,您正在这样做。因此内存管理现在已经完成。)非常简单。你说的是alloc
还是copy
还是retain
?不那么您就不需要说release
(您也不能这么做)
(出于这个原因,您需要释放url
和request
,您正在这样做。所以内存管理现在完成了。)我在第一个方法中说过,分配会话和下载任务。或者第二个方法中的对象不相同?您没有显示任何“分配”会话和下载任务的代码。你到底在说什么?啊。。。我不是用显式的“init”得到的。我现在明白了。谢谢你的回答!我在第一种方法中说过,分配会话和下载任务。或者第二个方法中的对象不相同?您没有显示任何“分配”会话和下载任务的代码。你到底在说什么?啊。。。我不是用显式的“init”得到的。我现在明白了。谢谢你的回答!最好是将downloadTask作为属性或数组中,或对其进行引用,以便在需要时可以取消它,等等。最好是将downloadTask作为属性或数组中,或对其进行引用,以便在需要时可以取消它,等等。