Xcode 5.1.1 - ARC项目在某些文件中没有显示使用Release和Autorelease的错误

时间:2014-11-10 13:17:43

标签: ios xcode compilation automatic-ref-counting

我有一个Xcode 5.1.1 iOS项目。我认为该项目没有使用ARC,然后被转换为ARC。我发现在某些文件中,我可以使用releaseautorelease而在其他文件中我不能使用,但Xcode会出错。

我知道可以通过在目标中为这些文件添加-fno-objc-arc编译器标志来禁用单个文件的ARC - >构建阶段 - >编译源代码。但是,我的文件中没有一个当前有这些标志。

看起来release也没有效果:

NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)myObject));
[myObject release];
NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)myObject));

在这两种情况下,NSLog都会打印1

出现这种行为的原因是什么?

2 个答案:

答案 0 :(得分:0)

将以下代码添加到以下文件之一:

#if __has_feature(objc_arc)
#error "arc yes"
#else
#error "arc no"
#endif

然后建立。这将告诉您是否启用了ARC(或者是否正在编译文件)。

如果未启用ARC并且您认为它应该是,则可以使用构建日志来验证传递给此文件的编译器的选项。

切换到报告导航器(Command + 8),找到构建错误并通过单击右侧的小汉堡来扩展错误。这将显示编译器用于编译此文件的所有选项。

将其复制到文本编辑器中,然后搜索-fobjc-arc-fno-objc-arc,或任何其他与弧相关的选项。

答案 1 :(得分:0)

我发现问题在于我使用的是非ARC的旧版iCarousel https://github.com/nicklockwood/iCarousel

导入iCarousel.h的每个文件都会导致上述问题。我只是下载了最新的ARC版本。