一.ARC为编译特性:
ARC 的规则非常简单:只要还有一个变量指向对象,对象就会保持在内存中
1.将用retain的地方换为strong,assign的地方不变。alloc的地方不再需要release,系统自动添加release,且
在dealloc的地方不能用[super dealloc]。
不允许调用release、retain、retainCount
允许重写dealloc,但是不允许调用[super dealloc]
允许重写dealloc,但是不允许调用[super dealloc]
2.对于strong的变量(局部变量用__strong),变量拥有对象。所谓强引用就是指如果没有对象关联它,系统自动将它销毁.
3.对于weak(成员变量用weak标识,局部变量用__weak标识),变量不拥有对象,功能类似于assign,只是在销毁的时候,会自动将与它关联的指针置为空。
- __weak NSString *str = [[NSString alloc] initWithFormat:@"1234"];
- NSLog(@"%@", str); // 打印出来是"(null)"
对于不能用weak的变量(),用unsafe_unretained。只是在这里销毁的时候,对应的指针
不会置为空,会变为一个野指针。
* strong :成员变量是强指针(适用于OC对象类型)
* weak :成员变量是弱指针(适用于OC对象类型)
* assign : 适用于非OC对象类型
* weak :成员变量是弱指针(适用于OC对象类型)
* assign : 适用于非OC对象类型
4.在循环引用中还是对应一个用strong,一个用weak
5.首先ARC只能工作于Objective-C对象,如果应用使用了Core Foundation或malloc()/free(),此时还是需要你来手动管理内存
二.arc中非arc设置
arc工程中要用非arc工程,在build phases中对应需要编译的文件加上fno-objc-arc编译标志,相反加上f-objc-arc编译标志