IOS开发复习笔记(3)-ARC

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

  1. __strong

因为__strong是默认的,所以使用

@property (nonatomic,strong) NSString *someString;
//等同
@property (nonatomic) NSString *someString;

__strong 等同retain。

原文地址:https://www.cnblogs.com/keithmoring/p/3864783.html