我正在尝试将现有的非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。
我肯定做错了什么。我应该仔细检查一下?
提前致谢。
答案 0 :(得分:1)
我刚刚解决了这个问题。我正在使用iRate库,在其中一个标题中定义了release和autorelease
#define release self
#define autorelease self
我删除了那些行,问题得到解决。因此,如果您遇到类似的情况,请检查某些第三方库是否已定义它们。
说真的,哪个体面的程序员会像这样定义“发布”和“自动释放”?惊人...