我正在尝试将现有的非 ARC 项目移动到 ARC。我已将build设置中的 Objective-C 自动引用计数标志设置为是。
这当然造成了很多有关发送显式发布/自动发布消息的错误。 对于代码中的错误,我删除了显式发布消息、dealloc block 等。 对于第三方库(如 ASIHTTPRequest)中生成的错误,我在构建阶段 - 编译源部分为所需文件添加了 -fno-objc-arc 标志。
然而,在我修复所有错误(并且项目编译成功)之后,我的代码中仍然有发布语句。
例如,在应用程序委托(delegate)中,我使用以下内容:
self.loginViewController = [[LoginViewController alloc] init];
self.window.rootViewController = self.loginViewController;
[self.window makeKeyAndVisible];
[self.loginViewController release];
据我了解,这应该会引发错误。但事实并非如此。该应用程序按预期运行,但让我对这些文件中的内存管理是否正确完成感到疑惑。
AppDelegate.m 和 LoginViewController.m 都没有设置 -fno-objc-arc 标志,因此它们应该默认为 ARC。
肯定是我做错了什么。我应该仔细检查什么?
提前致谢。
最佳答案
我刚刚解决了这个问题。我正在使用 iRate 库,它在其中一个 header 中定义了 release 和 autorelease
#define release self
#define autorelease self
我删除了那些行,问题就解决了。因此,如果您遇到类似的情况,请检查是否有一些第 3 方库定义了它们。
说真的,哪个体面的程序员会这样定义“release”和“autorelease”?太棒了……
关于ios - 过渡到 ARC - 发布不引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104831/