xcode中使用ARC问题
解决方案一:
那么在xCode中经常需要导入一些外来的代码文件,如果导入的文件使用了ARC机制而你的当前项目没有使用ARC,那么xCode会给出警告,或者报错。我们该如何处理这些问题呢:
点击项目导航文件--> 选中Targets--> 选择 Build Phases --> 展开Compile Sources
这个时候,我们看到第二列的名称为:Compiler Flags
双击你所要使用ARC的文件,并输入 -fobjc-arc,
那么现在这个文件就可以在编译时使用ARC机制进行编译了。
同上,如果想让使用ARC机制的代码不使用ARC机制,只需要输入 -fno-objc-arc
解决方案二:
就是我们在工程中会有很多的共通的lib包要导入,但是有些工程是支持ARC,有些工程是不支持ARC的,这个时候就需要分别对应了,昨天和一个日本人讨论一番,在iOS4.3中用ARC,支持是支持不过好像有问题,我举反对他举赞成,最后找了个网上的资料,否决了,今天无意中看一段github上的code,发现原来是可控的。
上一段代码先
#if !__has_feature(objc_arc)
[request autorelease];
#endif
看代码大概能猜出个12345,不过还是上网找了资料,结果就找到了一个github中ARC Helper的开源代码(现在意见习惯性的搜索github找解决方案了)
说实话每次都按照上面的代码写得话不是一般得烦,有了这个ARC Helper宏(参照:iOS开发中使用宏定义提高开发效率),写起来便利多了。
贴下代码,具体也可参照github的ARC HELPER
// // ARC Helper // // Version 1.2.2 // // Created by Nick Lockwood on 05/01/2012. // Copyright 2012 Charcoal Design // // Distributed under the permissive zlib license // Get the latest version from here: // // https://gist.github.com/1563325 // #ifndef AH_RETAIN #if __has_feature(objc_arc) #define AH_RETAIN(x) (x) #define AH_RELEASE(x) (void)(x) #define AH_AUTORELEASE(x) (x) #define AH_SUPER_DEALLOC (void)(0) #else #define __AH_WEAK #define AH_WEAK assign #define AH_RETAIN(x) [(x) retain] #define AH_RELEASE(x) [(x) release] #define AH_AUTORELEASE(x) [(x) autorelease] #define AH_SUPER_DEALLOC [super dealloc] #endif #endif // Weak reference support #ifndef AH_WEAK #if defined __IPHONE_OS_VERSION_MIN_REQUIRED #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 #define __AH_WEAK __weak #define AH_WEAK weak #else #define __AH_WEAK __unsafe_unretained #define AH_WEAK unsafe_unretained #endif #elif defined __MAC_OS_X_VERSION_MIN_REQUIRED #if __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6 #define __AH_WEAK __weak #define AH_WEAK weak #else #define __AH_WEAK __unsafe_unretained #define AH_WEAK unsafe_unretained #endif #endif #endif // ARC Helper ends