“ARC项目中缺少[super dealloc]”警告

时间:2012-08-28 09:28:52

标签: ios xcode automatic-ref-counting

我已经为ARC重构了一个项目。它看起来很好,但有一个使用通知中心的对象。我在自定义dealloc方法中删除了观察者。这在非ARC项目中运行良好。它也适用于ARC,但我收到一个疯狂的警告:“方法可能错过了[super dealloc]调用。”在ARC项目中,当方法结束时,它会自动为我完成。更好的是:我不能在ARC项目中调用它!这必须是一个XCode错误,对吗?这是我的代码:

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

我总是想编写不会发出警告的代码。那个黄色感叹号有办法吗?

3 个答案:

答案 0 :(得分:10)

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

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

如果在构建时遇到编译器错误,则确定ARC已关闭并且必须搜索原因。它可能是您目标中的每个文件构建设置。

答案 1 :(得分:1)

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

  1. 点击文件(<yourapp>.xcodeproj)类显示上方警告的目标(<classname>.m
  2. 选择 TARGET &gt;&gt; 构建阶段&gt;&gt; 编译来源
  3. 搜索文件
  4. 添加编译器标志 -fobjc-arc
  5. 这看起来如下

    enter image description here

答案 2 :(得分:0)

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

这是一个愚蠢的答案,但清理目标 并重新启动Xcode 已经解决了这个非常恼人的行为

  • 菜单&gt;产品&gt;清洁
  • 菜单&gt;产品&gt; (按alt键)清洁项目文件夹
  • 重启Xcode

之后,我收到了更多与ARC相关的警告,显然,Xcode还没有完成转换为ARC。现在警告已经消失,一切正常。