1.ARC
当你自己调用了release或retain语句的时候,ARC有效时编译文件会遇到错误,你可以通过-fno-objc-arc和-fobjc-arc两个编译器标志在混搭中支持ARC和非ARC的代码
如下面编译支持ARC,而文件代码不支持ARC
# if !__has_feature(objc_arc) //this code do not support to ARC -(void) release{ //release your var } #endif
在ARC工程中集成非ARC的第三方代码:当使用没有通过ARC编译的第三方框架时,编译库里面的文件需要使用-fno-objc-arc编译开关。Edit->Refactor->convert to Object-c ARC
在非ARC工程中集成ARC代码时:不会遇到编译错误,但可能会面临内存泄露,为避免此类事情的发生,需要使用-fobjc-arc来标记这些通过ARC编译的第三方代码
2.框架中的ARC
1)归零弱引用
弱一用通过持有指针而不关注引用计数的值来避免循环保留,但是当内存(指针指向内存)被销毁后,弱引用指向将是无效内容。销毁内存后在访问指针会导致应用崩溃,归零引用在销毁内存后将指针归零的方法来解决问题。
2)所有权修饰符
ARC会自动帮我们插入retain和release但是我们需要给它一些提示来销毁已分配内存的准确时机,这些提示就是所有权修饰符
- __strong
- __weak
- __unsafe_unretained
- __autoreleasing
前三个可用于属性的声明,属性声明不需要双下划线,默认的所有权修饰符是__strong
- __strong
因为__strong是默认的,所以使用
@property (nonatomic,strong) NSString *someString; //等同 @property (nonatomic) NSString *someString;
__strong 等同retain。