A有一个视图控制器,它创建一个“下载器”对象,它具有对视图控制器的引用(作为委托)。如果下载器成功下载该项目,则回调视图控制器。只要你停留在视图上,这工作正常,但如果你在下载完成之前离开,我会得到EXC_BAD_ACCESS
。我明白为什么会发生这种情况,但有什么方法可以检查一个对象是否仍然被分配? 我试图用delegate != nil
和[delegate respondsToSelector:]
进行测试,但它呛了。使用委托模式时避免EXC_BAD_ACCESS
if (!self.delegate || ![self.delegate respondsToSelector:@selector(downloadComplete:)]) {
// delegate is gone, go away quietly
[self autorelease];
return;
}
else {
// delegate is still around
[self.delegate downloadComplete:result];
}
我知道我可以,
一个)已下载器对象保留视图控制器
b)中保持在视图控制器下载程序的阵列,并且设置它们的代表值,以零时我取消分配视图控制器。
但我不知道是否有一个更简单的方法,我只是测试委托地址是否包含有效的对象?
如果你可以测试一个地址是否包含一个有效的对象,根据定义,它会,因为它是有效的访问它来测试? – 2010-04-21 03:46:46
objective-c有很多抽象...我可以想象一个世界,运行时能够分辨出一个地址与一个有效对象之间的区别,以及一个被释放的地址。 – 2010-04-21 04:22:28