gpt4 book ai didi

ios - 未在 ARC 应用程序上调用 Dealloc

转载 作者:IT王子 更新时间:2023-10-29 07:41:07 25 4
gpt4 key购买 nike

我有一个 UIViewController,它被推到容器 Controller 上,然后弹出,使用分配工具,我可以看到 View Controller 随后被销毁。但是,永远不会到达 Controller 的 dealloc 中的断点。有谁知道为什么不调用 dealloc? ARC 是否可以在不调用 dealloc 的情况下销毁对象?

另外,我已经禁用了 NSZombies(有些人说这会导致 dealloc 不触发)。

编辑:

Dealloc 做的不多,只是打印到控制台,它永远不会被调用:

- (void)dealloc
{
NSLog(@"取消分配...");
}

我不能发布容器 Controller ——它是专有的而且太复杂了。 Dealloc 在某些 Controller 上被一致调用,而在其他 Controller 上则不会。如果我能找到时间,我会尝试发布一个重现问题的简化版本。

有什么方法可以验证 NSZombies 是否被禁用?

编辑2

我正在发布仪器的屏幕截图;在我看来它正在正确解除分配。

enter image description here

最佳答案

我刚刚遇到了类似的问题。你有没有提到“ self ”的地方?我在我的 init 中有一些用于通知观察的 block ,我指的是“ self ”。在 ARC 下,self 保留在 block 中。我的 dealloc 没有被调用,那是我删除观察的地方。

诀窍是创建一个 __weak (iOS 5+) 或 __unsafe_unretained (iOS 4.x) 引用你的“self”并使用它来访问 self 或任何 _iVars(这些也会导致“self”被保留) block 中。这是一个例子。

__unsafe_unretained TableViewController *weakSelf = self;
[[NSNotificationCenter defaultCenter] addObserverForName:NSManagedObjectContextObjectsDidChangeNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
if (weakSelf.tableView) {
[weakSelf.tableView reloadData];
}
}];

关于ios - 未在 ARC 应用程序上调用 Dealloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9219030/

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