5

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

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

我一直想编写不会引发警告的代码。有没有办法绕过那个黄色感叹号?

4

3 回答 3

10

将以下行放入您的 dealloc 方法中,以确保在启用 ARC 的情况下对其进行编译:

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

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

于 2012-08-28T12:19:16.757 回答
1

我确实通过以下步骤解决了这个警告:

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

这看起来像下面

在此处输入图像描述

于 2016-01-06T08:25:59.160 回答
0

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

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

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

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

于 2013-11-10T15:59:59.073 回答