1

我正在尝试将现有的非 ARC 项目移至 ARC。我已将构建设置中的 Objective-C 自动引用计数标志设置为 YES。

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

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

例如,在应用程序委托中,我使用以下内容:

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

现在据我了解,这应该引发错误。但事实并非如此。该应用程序按预期工作,但给我留下了关于这些文件中是否正确完成内存管理的问题。

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

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

提前致谢。

4

1 回答 1

1

我刚刚解决了这个问题。我正在使用 iRate 库,在它的一个标头中它定义了发布和自动发布

#define release self
#define autorelease self

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

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

于 2012-10-28T01:12:24.173 回答