1.什么是ARC
-
Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入 的最大的变革和最激动人心的变化。ARC是新的LLVM 3.0编译器的一项特性,使用ARC,可以说一 举解决了广大iOS开发者所憎恨的手动内存管理的麻烦。
-
手动管理内存, 可以简称MRC (Manual Reference Counting)
在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不写retain,release和autorelease三个关键字就好~这是ARC的基本原则。 -
当ARC开启时,编译器将自动在代码合适的地方插入retain, release和autorelease,而作为程序猿,完全不需要担心编译器会做错(除非开发者自己错用ARC了)。
2.ARC的注意点和优点
- ARC的注意点
ARC是编译器特性,而不是运行时特性
ARC不是其它语言中的垃圾回收, 有着本质区别 - ARC的优点
完全消除了手动管理内存的烦琐, 让程序猿更加专注于app的业务
基本上能够避免内存泄露
有时还能更加快速,因为编译器还可以执行某些优化
3.ARC的判断原则
- ARC的判断原则
只要还有一个强指针变量指向对象,对象就会保持在内存中
- 强指针
- 默认所有指针变量都是强指针
- 被__strong修饰的指针
Person *p1 = [[Person alloc] init];
__strong Person *p2 = [[Person alloc] init];
- 弱指针
- 被__weak修饰的指针
__weak Person *p = [[Person alloc] init];
- 注意:当使用ARC的时候,暂时忘记“引用计数器”,因为判断标准变了。
ARC快速入门
1.ARC机制判断
-
IOS5以后,创建项目默认的都是ARC
Snip20150625_2.png -
ARC机制下有几个明显的标志:
1.不允许调用对象的 release方法
2.不允许调用 autorelease方法
3.再重写父类的dealloc方法时,不能再调用 [super dealloc];
2.ARC快速使用
int main(int argc, const char * argv[]) {
// 不用写release, main函数执行完毕后p会被自动释放
Person *p = [[Person alloc] init];
return 0;
}
网友评论