【问题标题】:ARC enabled but I can still use release and autorelease in my AppDelegate? [closed]启用了 ARC,但我仍然可以在我的 AppDelegate 中使用 release 和 autorelease? [关闭]
【发布时间】:2013-03-21 14:20:01
【问题描述】:

我在我的 iOS 应用程序中启用了 ARC,我认为这意味着您无法在不设置 -fno-objc-arc 标志的情况下显式调用 retainreleaseautorelease。显然,对于应用程序委托来说这不是真的。我在我的项目的“构建阶段”的“编译源”部分下检查了我的 AppDelegate 文件,它没有列出为我的 AppDelegate 文件设置的任何编译器标志。但是,我可以显式调用releaseautorelease,但不能显式调用retain。这是巫术的证据,还是 Apple 工程师通过黑客手段让 ARC 工作?

【问题讨论】:

    标签: ios objective-c memory-management automatic-ref-counting appdelegate


    【解决方案1】:

    如果您可以发送这些消息,则 ARC 已关闭。

    您可以使用检查

    #if ! __has_feature(objc_arc)
    #error "ARC is off"
    #endif
    

    【讨论】:

    • 我在我的 iOS 应用程序中启用了 ARC, 我认为他从 ARC 中排除了这个类。
    • @Nikolai:这是一个非常大胆的声明。那么我如何发送releaseautorelease 而不是retain? @Anoop:我在我的问题中表示没有排除应用程序委托。你确定你读了吗?
    • 将构建日志中的原始编译行复制/粘贴到您的问题中。很可能,编译器会说出第一个错误,并认为反复提醒您同一件事是浪费时间。
    • @FreeAsInBeer 您的项目有问题。也许有趣的预处理器定义或其他。 ARC 禁止发送任何retainreleaseautorelease
    • @NikolaiRuhe:有可能。我创建了一个新项目,无法使用retainreleaseautorelease。我想我会把它归结为魔法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多