--------------------------------------
android培训
、
java培训
、ios培训期待与您交流! ---------------------------------
ARC是自ios5之后新增的新特性。ARC是编译器特性,而不是ios运行时特性,ARC完全消除了手动管理内存的烦恼,编译器会自动在适当的地方插入适当的retain、release、autorelease语句,来提高开发者的工作效率,减少对内存处理不当的风险。
1,ARC的基本原理
<1>ARC的规则:只要还有一个强指针变量指向对象,对象就会保持在内存中,也就是说,ARC的判断准则是:只要没有强指针指向对象,对象就会被释放。
<2>强指针和弱指针
(1)强指针(Strong):默认情况下,所有的指针都是强指针。
(2)弱指针(weak):弱指针指向的对象被回收后,弱指针会自动变为空指针(nil),不会引发野指针(空指针)错误。
2,ARC的注意点:
<1>不允许调用releas、retain、autorelease
<2>允许重写dealloc方法,但是不允许在dealloc方法中调用[super dealloc];
<3>@property的参数
(1)Strong:成员变量是强指针(适用于OC对象类型)
(2)weak:成员变量是弱指针(适用于OC对象类型)
(3)assign:适用于非OC对象类型,
(4)以前的retain改为用Strong
#import <Foundation/Foundation.h>
@class Car;
@interface Person : NSObject
//strong代表成员变量_car是强指针类型的变量且只适用于OC对象
@property (nonatomic,strong)Car *car;
//strong代表成员变量_name是强指针类型的变量且只适用于OC对象
@property (nonatomic,strong)NSString *name;
//assign:适用于非OC对象类型
@property (nonatomic,assign)int age;
@end
<4>ARC下循环引用解决方案
(1) ARC
一端用strong,另一端用weak
(2) 非ARC
一端用retain,另一端用assign
#import <Foundation/Foundation.h>
@class Person;
@interface Car : NSObject
//weak代表成员变量_persson是弱指针类型的变量,用来解决ARC下的循环引用。
@property (nonatomic,weak)Person *person;
/*
这里Car和Person这两个类同时引用对方,这样就容易引发对象不能被释放的内存问题
在Person类一端用strong(@property (nonatomic,strong)Car *car;);
另一端用weak(@property (nonatomic,weak)Person *person;),
这样就可以解决ARC下的循环引用引发的对象不能释放的内存问题了。
*/
@end
3,Xcode 5.xx的ARC转换功能