gpt4 book ai didi

Xcode 和 ARC 调试问题(跳过 dealloc)

转载 作者:行者123 更新时间:2023-12-04 11:29:14 25 4
gpt4 key购买 nike

我花了一些时间调试 ARC 和自定义 dealloc 函数的一个奇怪问题。

  • 我正在继承 NSOperation类(class)
  • 我为此操作设置了完成块
  • 该操作由 的强属性引用。非常平面对象(没有方法,自动变量,两个强大的属性)让我们调用这个对象 DataRequest
  • 遵循所有准则,完成块仅使用对本地对象(包括操作本身)的弱引用
  • 编译器和分析器都不会产生任何问题
  • DataRequest持有对我生成的操作的唯一引用,并在操作完成块中销毁。它总是被销毁(它的 dealloc 总是被执行)
  • 我的操作有自定义dealloc .我只有一个 NSLog 调用。

  • ......问题是:

    如果我在调试器中运行它,dealloc 中的断点永远不会被命中,日志消息永远不会出现。主要是我以为手术漏水了。

    如果我在仪器中运行它,一切都很好,系统控制台会打印消息,并且分配仪器会报告从正确的堆栈快照(包括自定义 dealloc)中释放的操作。未检测到泄漏。

    我 100% 确定我使用相同的编译器设置进行调试和分析。

    最后最迷惑的一点:如果我创建了 [DataRequest dealloc]的自定义版本我把 self.operation = nil;对它 - 即使在调试器中也能正常工作。

    有没有人有一些提示什么编译器链接器选项可以尝试看到一些差异?这可能是 Apple 工具中的错误(我们所有人都将自己的错误归咎于一条大鱼,对吗?)

    ...是的,我已经尝试过 GDB 和 LLDB。结果是一样的——什么可能表明什么。

    我试图创建一个简约的示例,但它确实有效(确实);)

    谢谢

    最佳答案

    你有 NSZombiesEnabled 吗?我们遇到了同样的问题,并通过禁用 NSZombies 来“解决”它。

    “产品”->“方案”->“编辑方案”->“诊断”->取消选中“启用僵尸对象”

    我不确定为什么在启用 NSZombies 时不调用 dealloc(我很确定它是在 ARC 之前调用的)。

    关于Xcode 和 ARC 调试问题(跳过 dealloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753197/

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