我有一个Xcode 5.1.1 iOS项目。我认为该项目没有使用ARC,然后被转换为ARC。我发现在某些文件中,我可以使用release
和autorelease
而在其他文件中我不能使用,但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
。
出现这种行为的原因是什么?
答案 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版本。