2012-08-28 109 views
5

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

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

我总是想编写不会发出警告的代码。有没有解决这个黄色感叹号的方法?

+0

不应该有任何的警告,因为你嫌。你确定你正确关闭ARC吗? – DrummerB

+0

我把ARC打开了!我使用了Edit/Refactor/Convert to Objective-C ARC ...菜单。 –

+5

确保在没有ARC支持的情况下不会构建特定的实现文件 - 请检查Build-Phases->编译源代码。 – Till

回答

10

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

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

如果你构建时编译器错误,你肯定ARC已关闭,必须搜寻由于这个原因。它可能在您的目标中的每个文件的构建设置。

+0

好的,下面是对这个谜题的回答:该项目有两个目标,重构仅将一个目标的生成设置中的“Objective-C自动引用计数”标志更改为YES。所以另一个人就抛出了这个警告。我自己把它切换到YES,现在它工作。 谢谢,伙计们! –

+1

另外我刚刚发现,如果您在查看目标时为项目打开ARC,则目标仍将设置为NO。您需要单独为每个目标启用ARC。 –

0

“你试过关掉它吗?”

这是一个愚蠢的答案,但是清洗目标和重新启动的Xcode已经解决了,我

  • 菜单>产品>清洁
  • 菜单>产品>(按这很让人讨厌的行为alt键)清洁工程文件夹
  • 重新启动Xcode

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

1

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

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

这看起来像下面

enter image description here