“ARC项目中缺less”警告

我把一个项目重构到了ARC。 它看起来不错,但有一个使用通知中心的对象。 我删除了自定义dealloc方法中的观察者。 这在非ARC项目中运行良好。 它也适用于ARC,但我得到一个疯狂的警告:“方法可能会丢失[super dealloc]调用。” 在一个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 

如果在构build时遇到编译器错误,则确定ARC已closures,必须search原因。 这可能是在您的目标中的每个文件的构build设置。

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

  1. 单击其中文件( <classname>.m )类显示上面警告的目标( <yourapp>.xcodeproj
  2. select目标 >> 构build阶段 >> 编译源代码
  3. search文件
  4. 添加编译器标志 -fobjc-arc

这看起来像下面

在这里输入图像说明

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

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

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

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