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