Ios &引用;缺少[super dealoc]”;ARC项目中的警告

Ios &引用;缺少[super dealoc]”;ARC项目中的警告,ios,xcode,automatic-ref-counting,Ios,Xcode,Automatic Ref Counting,我已将一个项目重构为ARC。它看起来不错,但是有一个对象使用了通知中心。我在一个自定义的dealloc方法中删除了观测者。这在非ARC项目中运行良好。它在ARC中也可以工作,但我得到一个疯狂的警告:“方法可能缺少[super dealoc]调用。”在ARC项目中,当方法结束时,它会自动为我完成。更好的是:我不能把它称为ARC项目!这一定是一个XCode错误,对吗?这是我的密码: - (void)dealloc { [[NSNotificationCenter defaultCenter]

我已将一个项目重构为ARC。它看起来不错,但是有一个对象使用了通知中心。我在一个自定义的dealloc方法中删除了观测者。这在非ARC项目中运行良好。它在ARC中也可以工作,但我得到一个疯狂的警告:“方法可能缺少[super dealoc]调用。”在ARC项目中,当方法结束时,它会自动为我完成。更好的是:我不能把它称为ARC项目!这一定是一个XCode错误,对吗?这是我的密码:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    // [super dealloc]; will be called automatically
}

我总是希望编写不抛出警告的代码。有办法绕过那个黄色感叹号吗

将以下行放入dealloc方法中,以确保它是在启用ARC的情况下编译的:

#if ! __has_feature(objc_arc)
#error "ARC is off"
#endif
如果在构建时出现编译器错误,则确定ARC已关闭,必须搜索原因。它可能在目标中的每个文件生成设置中。

“您是否尝试过将其关闭并再次打开?”

这是一个愚蠢的回答,但是清理目标并重新启动Xcode解决了这个让我非常恼火的行为

  • 菜单>产品>清洁
  • 菜单>产品>(按alt键)清除项目文件夹
  • 重新启动Xcode

在那之后,我得到了更多与ARC相关的警告,所以很明显,Xcode并没有完成到ARC的转换。现在警告消失了,一切正常。

我通过以下步骤解决了此警告:

  • 单击目标(
    .xcodeproj
    ),其中文件(
    .m
    )类显示上述警告
  • 选择目标>构建阶段>编译源代码
  • 搜索文件
  • 添加编译器标志
    -fobjc arc
  • 这是下面的图


    正如您所怀疑的,不应该有任何警告。你确定你正确关闭了ARC吗?我打开了ARC!我使用了编辑/重构/转换为Objective-C弧。。。菜单。确保在没有ARC支持的情况下不会生成特定的实现文件-检查生成阶段->编译源代码。带有警告的文件应使用ARC生成(未输入编译器标志)。不过,还有其他文件带有-fno objc arc标志。您清理并删除了派生数据和所有内容吗?好的,下面是这个谜题的答案:项目有两个目标,重构只将一个目标的构建设置中的“Objective-C自动引用计数”标志更改为“是”。所以另一个发出了警告。我自己把它换成了是,现在它工作了。谢谢,伙计们!此外,我刚刚发现,如果在查看目标时为项目启用ARC,目标仍将设置为“否”。您需要为每个出现的目标分别启用ARC。