ARC机制(自动引用技术):编译器特性
一、ARC是什么
ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。
ARC的判断准则:只要没有强指针指向对象,就会释放对象
二、ARC特点
1)不允许调用release、retain、retain count
2)允许重写dealloc,但是不允许调用[super dealloc]
3)@property的参数
*strong:成员变量是强指针(用于OC对象)
*weak:成员变量是弱指针(用于OC对象类型)
*assign:用于非OC对象
4)以前(非ARC时)的retain改为strong
三、举例
1. 一个完整、正确的,用来描述“Person”特性的类的实现(implementation),是这样的:
Person.h文件
@interface Person : NSObject
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, strong) NSNumber *yearOfBirth;
@property (nonatomic, strong) Person *spouse;
@end
Person.m文件
@implementation Person
@synthesize firstName, lastName, yearOfBirth, spouse;
@end
2. 使用ARC的话,你可以实现一个人为的方法,如下:
- (void)contrived {
Person *aPerson = [[Person alloc] init];
[aPerson setFirstName:@"William"];
[aPerson setLastName:@"Dudney"];
[aPerson:setYearOfBirth:[[NSNumber alloc] initWithInteger:2011]];
NSLog(@"aPerson: %@", aPerson);
}
因为使用ARC来管理内存,所以无论是“Person”或者“NSNumber”都不会发生内存泄漏。