ARC了解
来源:互联网 发布:淘宝双11购物券怎么用 编辑:程序博客网 时间:2024/06/06 05:04
ARC是自iOS5开始增加的新特性,是iOS程序猿的福音
ARC的全称是AutomaticReferenceCounting(自动引用计数)
ARC的实现细节
- 编译器会自动在适当的地方插入适当的retain、release、autorelease语句
- 也就是说,编译器会自动生成内存管理的代码,不用程序猿手动编写
如果是手动管理内存,可以简称MRC(ManualReferenceCounting)
ARC与其他语言的”垃圾回收”机制不同。ARC:编译器特性;“垃圾回收”运行时特性
ARC的注意点
- ARC是编译器特性,而不是运行时特性
- ARC不是其它语言中的垃圾回收,有着本质区别
ARC的优点
- 完全消除了手动管理内存的烦琐,让程序猿更加专注于app的业务
- 基本上能够避免内存泄露
- 有时还能更加快速,因为编译器还可以执行某些优化
ARC的判断原则
- 只要还有一个强指针变量指向对象,对象就会保持在内存中
- **注意:当使用ARC的时候,忘记“引用计数器”,判断标准变了。
强指针
- 默认所有指针变量都是强指针
- 被__strong修饰的指针
弱指针
- 被__weak修饰的指针
// 1.案例
__strong Person *p1 = [[Personalloc]init];
__strong Person *p2 = p1;
p1 = nil;
//insert code here...
NSLog(@"Hello, World!");
p2 = nil;
NSLog(@"hello");
// 2.案例
__strong Person *p1 = [[Personalloc]init];
__weak Person *p2 = p1;
p1 = nil;
//insert code here...
NSLog(@"Hello, World!");
p2 = nil;
NSLog(@"hello");
// 3.案例:Person的Dog属性
// 使用ARC后,可以重写dealloc方法,但是不能在里面调用[superdealloc]了。
Person *p1 = [[Personalloc]init];
Dog *dog = [[Dogalloc]init];
p1.dog = dog;
dog =nil;
//insert code here...
NSLog(@"Hello, World!");
p1 = nil;
NSLog(@"hello");- ARC使用细节
- 不能调用release、retain、autorelease、retainCount
可以重写dealloc,但是不能调用[superdealloc]
ARC中的@property
- strong: 用于OC对象,相当于MRC中的retain
- weak: 用于OC对象,相当于MRC中的assign
- assign:用于基本数据类型,跟MRC中的assign一样
- copy: 一般用于NSString,跟MRC中的copy一样
- 在ARC情况下解决”循环retain”的问题:@property一边用strong,一边用weak。
- ARC了解
- ARC的初了解
- 了解Xcode 4.2中Automatic Reference Counting(ARC)
- 关于ARC需要了解的一些基本知识点
- 关于ARC需要了解的一些基本知识点
- 关于ARC需要了解的一些基本知识点
- 关于ARC需要了解的一些基本知识点
- ARC
- ARC
- arc
- ARC
- ARC
- ARC
- ARC
- arc
- ARC
- ARC
- arc
- jquery代码mark
- VS2015正式版出炉-----
- Different Ways to Add Parentheses
- OC一些字符串的练习
- Hadoop笔记之shuffle工作流程图及其原理分析
- ARC了解
- 使用.NET中的XML注释(一) -- XML注释标签讲解
- 兔子--Android Studio中ButterKnife插件的安装
- CSS 相对/绝对(relative/absolute)定位系列(二)
- SGU 194. Reactor Cooling (无源汇有上下界最大流
- MingW Autotools 编写Vala程序 之二
- java整型数与网络字节序的 byte[] 数组转换关系
- Java多态性的理解
- Oracle BIEE EVALUATE系列使用数据库函数