gpt4 book ai didi

ios - 从 Interface Builder 实例化的 View 中的僵尸对象

转载 作者:可可西里 更新时间:2023-11-01 03:34:32 25 4
gpt4 key购买 nike

我在应用程序的关键点发生了崩溃。然而,崩溃似乎来自过度释放的 UIView 对象(更具体地说是 UITableView 的标题 View ,在本例中是 UISearch 栏)。奇怪的是,它是从 nib 文件实例化的。这是崩溃...

我已将我的 nib 文件设置为与 Apple 在其示例项目之一中的文件完全匹配。

enter image description here

我还花时间使用 NSZombieEnabled 和 Instruments 对此进行了分析。但是,我仍然无法弄清楚为什么会这样。这是保留/释放的配对....

enter image description here

以及创建 UIView 对象时公开的堆栈跟踪。

enter image description here

此类错误的常见示例是创建 NSError 对象并将其分配给自动释放 block 中的 out 参数。但是,我不希望在 UIView 中看到同样的问题。我也没有在我的代码中的任何地方看到自动释放 block (保存在主运行循环中的那个)。关于如何解决这个问题有什么想法吗?

最佳答案

问题是,监听通知或添加 KVO 观察者不会改变观察对象的保留计数。并且在您的 View / View Controller /对象的解除分配之后似乎立即触发了一个通知。

您可以更改 - (void)dealloc 方法以从您的 View / View Controller 中删除通知/KVO 观察器

通知:

-(void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
//if you are not using ARC you also have to write
//[super dealloc];
}

对于 KVO 使用方法和你的键路径

- (void)removeObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath

干杯,尼尔斯

关于ios - 从 Interface Builder 实例化的 View 中的僵尸对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19523773/

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