gpt4 book ai didi

ios - 在 dealloc 之后检查回调中的对象

转载 作者:行者123 更新时间:2023-11-29 13:35:07 27 4
gpt4 key购买 nike

请耐心等待我解释这一点。

我在 UITableViewCell 中有一个 HJManagedImageV 实例。我将它的回调设置为 self,一个 UIVIewController 实现需要的协议(protocol)(HJManagedImageVDelegate)。

当我导航到然后快速离开这个 Controller 时,回调是最终向不再存在的物体开火。 (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 是否仍然可用?

最佳答案

使用委托(delegate)模式的对象的生命周期不会比它们的委托(delegate)长,这是一个很好的设计实践。但是,如果这是不必要的坏事,您应该确保在释放委托(delegate)本身时将对象的委托(delegate) ivar 设置为 nil。

换句话说,通常委托(delegate)恰好是其对象的所有者。然后,如果他们希望自己的 child 比自己长寿,所有者有责任清除委托(delegate) ivars。

关于ios - 在 dealloc 之后检查回调中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com