ARC , Automatic Reference Counting,自动引用计数,即ARC。
顾名思义:系统自动帮我们去计算对象的引用计数器的值。
可以说,这门技术,是WWDC2011和iOS5引入的最大的变革和最激动人心的变化。。。
ARC是新的LLVM3.0编译器的一项特性,使用ARC,可以说一举解决了广大iOS开发者所憎恨的手动内存管理的麻烦。
在程序中使用ARC非常简单,只需要像往常那样编写代码,
只不过永远不要写retain,release,autorelease这三个关键字就好,这就是ARC的最基本的原则。关于dealloc方法,只要不调用[super dealloc];这句话,就可以写。。
当ARC开启的时候,编译器会自动的在合适的地方插入retain,release,autorelease代码。
编译器自动为对象做引用计数,而作为开发者,完全不需要担心编译器会做错,除非开发者自己错用了ARC。
需要特别注意的是:ARC是编译器机制,在编译器编译代码的时候,会在适时的位置加入retain,release,autorelease代码。
例如,有一个Person类:
#import
@interface Person:NSObject
{
int _age;
}
– (void)setAge:(int)age;
– (int)age;
– (void)sayHi;
@end
#import “Person.h”
@implementation Person
– (void)setAge:(int)age
{
_age = age;
}
– (int)age
{
return _age;
}
– (void)sayHi
{
NSLog(@"大家好,我是人。。。”);
}
– (void)dealloc
{
NSLog(@“人挂了。。。”);
}
@end
#import
int main()
{
Person *p1;//这就是1个强类型指针
__strong Person *p2 ; //你也可以这么写,加1个标识符__strong,显示的标注这个指针是强指针
}
例如:
int main()
{
__strong Person *p1 = [Person new];
__weak Person *p2 = p1;
[p1 sayHi];
[p2 sayHi];
}
int main()
{
__strong Person *p1 = [Person new];
__weak Person *p2 = p1;
p1 = nil;//这句话执行完毕的时候,p1这个强指针就不指向这个对象了,p2这个弱指针还指向这个对象,这个对象就会被系统立即回收
}
1)默认情况下,Xcode开启ARC机制
2)如果你还不放心的话,可以调一下retain,如果调不出来的话,说明在ARC机制下,如果能调出来,说明在MRC下面
3)在dealloc方法中,不允许调用[super dealloc];
4)或者,你实在放心不下,看看设置里ARC是不是YES就可以了
int main()
{
if(1)
{
Person *p1 = [Person new];
}
}
这个Person 对象什么时候回收:
1)当if语句的大括号执行完毕的时候,p1是个局部变量,p1就被回收了,也就没有强类型的指针指向Person 对象了,Person 对象也就被回收了。。。