【问题标题】:Is there a way to rewrite dealloc in Automated Reference Counting? Why doesn't it work?有没有办法在自动引用计数中重写 dealloc?为什么它不起作用?
【发布时间】:2012-10-22 07:20:00
【问题描述】:

我是一名计算机编程专业的二年级学生,正在使用 Objective C 开发一个程序。(Xcode,如果重要的话)。现在,我们正在制作动画并在屏幕上移动动画对象。现在,我正在处理一个让我发疯的错误。我的程序正在使用 ARC,即自动引用计数,据说它应该有助于内存管理。但是,由于某种原因,我似乎无法使用

[super dealloc]; 

它总是给我一个错误,上面写着“ARC 禁止显式发送‘dealloc’的消息

这是为什么?我如何解决它?它适用于我的其他程序,只是不是这个?

此外,发布似乎也不起作用。例如,以下代码给了我 2 个错误: [火球释放];

错误显示“'release' 不可用:在自动引用计数模式下不可用”,下一个错误显示“ARC 禁止显式发送 'release' 消息。”为什么会发生这种情况,我该如何解决?此代码适用于我的其他程序。有人可以解释一下,或者至少提供一个可以解决我所有问题的链接吗?感谢阅读

【问题讨论】:

    标签: objective-c xcode automatic-ref-counting release dealloc


    【解决方案1】:

    您应该花一些时间来完全了解Apple's Guide on ARC

    它将为您节省 时间,而且绝对值得理解。

    【讨论】:

    • 不过,简短的版本是,如果没有 ARC,您将使用“手动引用计数”,您可以使用 retain 之类的命令明确跟踪是否要保留特定对象、releaseautorelease 通知运行时何时可以释放对象。使用 ARC(自动引用计数),它会自动确定您何时不再拥有对某个对象的引用,以便在您不再使用它时将其丢弃。因此,手动方法中使用的那些命令不再使用/需要/允许。
    • 我把这些行注释掉了,基本上和去掉是一样的吧?好吧,它给了我一个错误,上面写着:链接器命令失败,退出代码为 1(使用 -v 来查看调用),坦率地说,这个错误看起来很可怕。这是什么问题,我该如何解决?
    【解决方案2】:

    您可以定义自己的 dealloc 方法,只是不能调用 [super dealloc](ARC 会自动调用它)。发布也是如此,您不需要调用它,因为 ARC 处理将其放置在您的代码中

    【讨论】:

    • 我把这些行注释掉了,基本上和去掉是一样的吧?好吧,它给了我一个错误,上面写着:链接器命令失败,退出代码为 1(使用 -v 来查看调用),坦率地说,这个错误看起来很可怕。这是什么问题,我该如何解决?
    • 你能贴一些代码吗?不看你的方法就很难调试
    【解决方案3】:

    简单,只需删除该行。 ARC 负责所有的 release/autorelease/dealloc 调用。 ARC 对您的对象的生命周期有 100%(几乎)的洞察力,并为您插入这些调用。

    你仍然可以重写 dealloc 方法来进行一些清理。

    【讨论】:

    • 我把这些行注释掉了,基本上和去掉是一样的吧?好吧,它给了我一个错误,上面写着:链接器命令失败,退出代码为 1(使用 -v 来查看调用),坦率地说,这个错误看起来很可怕。这是什么问题,我该如何解决?
    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2022-11-17
    相关资源
    最近更新 更多