转换到ARC - 释放不会引发错误

时间:2012-10-27 22:45:22

标签: ios xcode memory-management automatic-ref-counting

我正在尝试将现有的非ARC项目移至ARC。我已将Build Settings中的Objective-C Automatic Reference Counting标志设置为YES。

这当然会在发送显式发布/自动释放消息时产生很多错误。 对于我的代码中的错误,我删除了显式释放消息,dealloc块等。 对于在第三方库中生成的错误(如ASIHTTPRequest),我在Build Phases - Compile Sources部分为所需文件添加了-fno-objc-arc标志。

然而,在我修复了所有错误(并且项目编译成功)之后,我的代码中仍然有发布语句。

例如,在app委托中,我使用以下内容:

self.loginViewController       = [[LoginViewController alloc] init];
self.window.rootViewController = self.loginViewController;
[self.window makeKeyAndVisible];
[self.loginViewController release];

据我了解,这应该会引发错误。但事实并非如此。该应用程序按预期工作,但让我对是否在这些文件中正确完成内存管理提出了疑问。

AppDelegate.m和LoginViewController.m都没有设置-fno-objc-arc标志,所以它们应该默认为ARC。

我肯定做错了什么。我应该仔细检查一下?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我刚刚解决了这个问题。我正在使用iRate库,在其中一个标题中定义了release和autorelease

#define release self
#define autorelease self

我删除了那些行,问题得到解决。因此,如果您遇到类似的情况,请检查某些第三方库是否已定义它们。

说真的,哪个体面的程序员会像这样定义“发布”和“自动释放”?惊人...