“缺少[超级的dealloc]”在ARC项目预警(“Missing [super dealloc]”

2019-09-21 19:23发布

我已经重构了一个项目,ARC。 它看起来不错,但它使用的通知中心的对象。 我删除了一个自定义的dealloc方法观察者。 在非ARC项目工作的罚款。 它也适用于ARC,但我得到一个疯狂的警告:“方法可能缺少[超级的dealloc]呼吁” 在ARC项目对我来说是自动完成的,当该方法结束。 更妙的是:我不能把它在ARC项目! 这必须是一个Xcode的错误,对吧? 这里是我的代码:

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

我总是想编写的代码,不会引发警告。 有没有周围的黄色感叹号的方法吗?

Answer 1:

把下面的行到您的dealloc方法,以确保它与启用ARC编译:

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

如果你构建时编译器错误,你肯定ARC已关闭,必须查找原因。 这也可能是在你的目标每个文件的构建设置。



Answer 2:

我也决心通过以下步骤此警告:

  1. 点击目标( <yourapp>.xcodeproj ),其中该文件( <classname>.m )类示出上述警告
  2. 选择目标 >> 构建阶段 >> 编译源代码
  3. 搜索文件
  4. 添加编译器标志 -fobjc-arc

这看上去象下面这样



Answer 3:

“你试过把它关掉再打开吗?”

这是一个愚蠢的答案,但清洗的目标,并重新启动Xcode中已经解决了这个很让人讨厌的行为对我来说

  • 菜单>产品>清洁
  • 菜单>产品>(请按Alt键)清理项目文件夹
  • 重新启动的Xcode

在那之后,我得到了更多的ARC相关的警告,那么清楚,Xcode中还没有完成转换为ARC。 现在警告走了,一切工作就好了。



文章来源: “Missing [super dealloc]” warning in an ARC project