【发布时间】:2011-02-10 10:20:34
【问题描述】:
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。
但我想知道是否有更简单的方法,我只测试委托地址是否包含有效对象?
【问题讨论】:
-
如果你可以测试一个地址是否包含一个有效的对象,根据定义,它会,因为访问它来测试它是有效的?
-
objective-c 有很多抽象......我可以想象这样一个世界,运行时能够区分具有有效对象的地址和已释放对象的地址。
标签: iphone objective-c memory-management exc-bad-access