我使用以下代码下载图片:
- (void)downloadImageAtUrl:(id)url
andDelegate:(id<IPServerDelegate>)delegate_ {
NSURL *correctUrl = nil;
if ([url isKindOfClass:[NSString class]])
correctUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", kHostURL, [url substringFromIndex:1]]];
else
correctUrl = url;
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:correctUrl];
[imageRequestsArray addObject:request];
[request setCompletionBlock:^{
if (request.responseStatusCode == 200) {
if (delegate_ && [delegate_ respondsToSelector:@selector(didDownloadImage:atUrl:)]) {
[delegate_ didDownloadImage:request.responseData atUrl:request.url];
}
}
else {
if (delegate_ && [delegate_ respondsToSelector:@selector(failedToDownloadImageWithUrl:)]) {
[delegate_ failedToDownloadImageWithUrl:request.url];
}
}
[imageRequestsArray removeObject:request];
}];
[request setFailedBlock:^{
if (delegate_ && [delegate_ respondsToSelector:@selector(failedToDownloadImageWithUrl:)]) {
[delegate_ failedToDownloadImageWithUrl:request.url];
}
[imageRequestsArray removeObject:request];
}];
[request startAsynchronous];
}
如果已取消分配delegate_对象,则应用程序崩溃。如何确定对象delegate_已被解除分配而无需创建对它的直接引用?我知道iOS 5中的__weak指针,但我的应用程序必须与iOS 4.3兼容。
答案 0 :(得分:0)
好吧,当你的delegate_被解除分配时,我认为它是释放。如果是,则在:
之后[object release];
这样做:
object=nil;
然后,在您的代码上,检查它是否存在:
if(delegate_){
}
答案 1 :(得分:0)
好的,所以我找到了解决方案。我将所有ASIHTTPRequest对象存储在请求数组中。当我的任何UIViewControllers即将消失时(viewWillDisappear),我通过数组枚举并向每个请求对象发送取消消息。这里唯一的不便是每次再次出现视图时都必须恢复这些请求,但至少它不会崩溃。