ios - 过渡到 ARC - 发布不引发错误

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

我正在尝试将现有的非 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/

相关文章:

ios - 通过深层链接打开 View Controller 时导航栏消失

objective-c - 使 Xcode 将 "may not respond to"视为错误而不是警告

memory-management - 迭代数组时内存使用量激增

在 C 中更改二进制地址中的一个给定位

ios - UICollectionView 具有两个 UICollectionViewFlowLayout

ios - iOS 7 中的 ViewController 撤消 Segue

iOS 8.1 模拟器总是使用美国键盘布局,尽管德国硬件键盘

memory-management - 虚拟内存和物理内存有什么区别?

ios - 具有自动调整单元格的 Collection View 不再水平滚动

ios - 无法运行有关 PJSip 的 iPhone 模拟器