A 有一个视图控制器,它创建一个“下载器”对象,该对象具有对视图控制器的引用(作为委托)。如果成功下载项目,下载器会回调视图控制器。只要您停留在视图上,它就可以正常工作,但是如果您在下载完成之前离开,我会得到EXC_BAD_ACCESS
. 我理解为什么会发生这种情况,但是有没有办法检查一个对象是否仍然被分配?我尝试使用delegate != nil
, 和进行测试[delegate respondsToSelector:]
,但它卡住了。
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];
}
我知道我可以,
a) 让下载器对象保留视图控制器
b) 在视图控制器中保留一组下载器,并在我解除分配视图控制器时将它们的委托值设置为 nil。
但我想知道是否有更简单的方法,我只测试委托地址是否包含有效对象?