当我试图解释这一点时,请耐心等待。
我在 UITableViewCell 中有一个 HJManagedImageV 实例。我将它的回调设置为 self,一个 UIVIewController 实现所需的协议(HJManagedImageVDelegate)。
当我快速离开这个控制器时,回调最终会在不再存在的对象上触发。(HJManagedImageV 保留其代表。)
问题是在回调内部,如果没有获得 EXC_BAD_ACCESS,我无法检查对象是否有效。
-(void)managedImageSet:(HJManagedImageV*)mi {
mi.callbackOnSetImage = nil;
if(mi != nil && mi.image != nil) { // EXC_BAD_ACCESS when checking mi.image
[mi setImage:[mi.image roundedCornerImage:9 borderSize:0]];
}
}
这是崩溃时的 mi:
mi HJManagedImageV * 0x0022fae0
UIView UIView
oid id 0x00000000
url NSURL * 0x00000000
moHandler HJMOHandler * 0x00000000
image UIImage * 0x00000000
imageView UIImageView * 0x00000000
callbackOnSetImage id 0x00000000
callbackOnCancel id 0x00000000
callbackOnError id 0x00000000
isCancelled BOOL false
loadingWheel UIActivityIndicatorView * 0x00000000
onImageTap NSInvocation * 0x00000000
index int -1
modification int 0
我很困惑为什么检查 mi.image 会让我崩溃。我还能如何判断 mi 是否仍然可用?