关于iOS中ARC机制的理解
2016-02-15 18:13
537 查看
ARC是苹果公司在iOS4.3之后才出现的内存管理机制,全名为: ARC(Automatic
Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。但其又有别于java,c#的自动垃圾回收机制。甚至在本人理解中,觉得ARC更优于JVM一些。
在ARC中又引入了两个关键字:strong,weak,
强指针:strong,对应手动内存管理的retain关键字
@property(nonatomic,strong)NSString * name;
弱指针:weak,对应手动内存管理的assign关键字,
@property(nonatomic,strong)NSString * card;
当然,也不是说在ARC模式下,assign关键字完全被weak取代,在基本数据类型中,我们还是需要使用到assign,而strong,weak一定都是应用在对象类型变量上。
@property(nonatomic,assign)int age;
总结:
1.只要有强指针(strong)指向一个对象,那么系统就不会回收该对象
2.只要没有强指针(strong)指向一个对象,系统立即回收该对象。(这就是ARC与JVM的区别,JVM是一种分配机制,当内存没有压力的时候,是不会回收对象)
3.弱指针(weak)不影响对象被回收
4.默认情况下,所有的指针都是强指针类型的。
注意:
1.代码中不能再手动调用 retain, release, retain, autorelease
2.不重载dealloc方法,但是如果是释放对象内存以外的处理,是可以重写该函数的,但是不能调用[super dealloc]
3.不能使用NSAllocateObject, NSDeallocateObject
4. id与void *间的如果cast时需要用特定的方法(__bridge关键字)
5.不能使用NSAutoReleasePool、而需要@autoreleasepool块
6.不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”
Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。但其又有别于java,c#的自动垃圾回收机制。甚至在本人理解中,觉得ARC更优于JVM一些。
在ARC中又引入了两个关键字:strong,weak,
强指针:strong,对应手动内存管理的retain关键字
@property(nonatomic,strong)NSString * name;
弱指针:weak,对应手动内存管理的assign关键字,
@property(nonatomic,strong)NSString * card;
当然,也不是说在ARC模式下,assign关键字完全被weak取代,在基本数据类型中,我们还是需要使用到assign,而strong,weak一定都是应用在对象类型变量上。
@property(nonatomic,assign)int age;
总结:
1.只要有强指针(strong)指向一个对象,那么系统就不会回收该对象
2.只要没有强指针(strong)指向一个对象,系统立即回收该对象。(这就是ARC与JVM的区别,JVM是一种分配机制,当内存没有压力的时候,是不会回收对象)
3.弱指针(weak)不影响对象被回收
4.默认情况下,所有的指针都是强指针类型的。
注意:
1.代码中不能再手动调用 retain, release, retain, autorelease
2.不重载dealloc方法,但是如果是释放对象内存以外的处理,是可以重写该函数的,但是不能调用[super dealloc]
3.不能使用NSAllocateObject, NSDeallocateObject
4. id与void *间的如果cast时需要用特定的方法(__bridge关键字)
5.不能使用NSAutoReleasePool、而需要@autoreleasepool块
6.不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”
相关文章推荐
- iOS 提交时显示 Valid signing identity not found 证书的签发者无效
- ios 分辨率 和物理大小
- Aspects iOS的AOP面向切面编程的库
- iOS支付宝接口调用总结
- iOS-延迟操作方法总结
- IOS支付宝支付步骤
- IOS开发证书显示“此证书的签发者无效”
- IOS跑马灯效果,实现文字水平无间断滚动
- IOS实现自动循环滚动广告--ScrollView的优化和封装
- iOS touchID 处理办法
- iOS开发关于xcode中souceControl的苹果文档翻译(节选)
- IOS 中方法重组(Method swizzling)
- iOS中 加强日志输出 开发技术总结
- ios设置图片的拉伸区域
- iOS支付宝集成时遇到的问题整理(2)
- ios打印NSInteger的时候去除警告
- iOS相关,过年回来电脑上的证书都失效了,求大神!
- IOS开发缓存机制之—内存缓存机制
- ios学习笔记(二)第一个应用程序--Hello World
- ios学习笔记(二)第一个应用程序--Hello World