黑马程序员---OC学习笔记之autorelease注意及错误用法
来源:互联网 发布:em算法 图片分割 编辑:程序博客网 时间:2024/06/05 09:06
------Java培训、Android培训、iOS培训、.Net培训--------
1、autorelease使用时注意事项
1)并不是放到自动释放池代码中,都会自动加入到自动释放池
@autoreleasepool { //并不是放到自动释放池代码中,都会自动加入到自动释放池 //如需释放,要加入到自动释放池中 //Person *p = [Person new];这样不会被自动销毁 Person *p = [[Person new] autorelease];//加入自动释放池 }
2)如果调用了autorelease方法,但是调用时对象不在任何自动释放池中,此时该对象也不会加入到自动释放池中。
【注意】以下这种做法原则上是不允许用的,会在释放池销毁时想p发送两次release消息
@autoreleasepool { [p autorelease]; [p autorelease]; }
3)autorelease嵌套
//autorelease嵌套 //自动释放池的栈结构(一种数据结构)跟内存中的栈区是不一样的 Person *p = [Person new];//p的计数器值 1 [p retain];//p的计数器值 2 [p retain];//p的计数器值 3 @autoreleasepool { @autoreleasepool { @autoreleasepool { NSLog(@"p retainCount = %lu",p.retainCount); [p autorelease]; } [p autorelease]; NSLog(@"p retainCount= %lu",p.retainCount); } [p autorelease]; NSLog(@"p retainCount= %lu",p.retainCount); }
打印结果:
2015-10-06 20:53:42.109 MRCDemo[2891:303] pretainCount = 3
2015-10-06 20:53:42.111 MRCDemo[2891:303] pretainCount = 2
2015-10-06 20:53:42.112 MRCDemo[2891:303] pretainCount = 1
2015-10-06 20:53:42.112 MRCDemo[2891:303] This persondead....
4)自动释放池中不适宜放占用内存较大的对象
A、尽量比卖弄对大内存使用该方法,对于这种延迟释放机制,还是尽量少用
B、不要把大量循环操作放到同一个@autoreleasepool中,这样会造成内存峰值生升
2、autorelease的错误用法
1)连续多次调用autorelease,释放池销毁时多次执行release
2)alloc之后调用了autorelease,之后又调用了release
例如:
@autoreleasepool { [p autorelease]; } [p release];
0 0
- 黑马程序员---OC学习笔记之autorelease注意及错误用法
- 黑马程序员---OC学习笔记之autorelease快速创建对象的应用
- OC学习笔记之autorelease
- 黑马程序员---OC学习笔记之NSFileManager介绍和用法
- 黑马程序员---OC学习笔记之copy概念及入门
- 黑马程序员----Objective-C学习笔记之autorelease基本使用
- 黑马程序员 -- OC语言 Autorelease
- 黑马程序员----OC学习笔记之NSArray
- 【黑马程序员】autorelease的基本使用及注意
- 黑马程序员——OC基础之autorelease
- autorelease注意和错误用法
- 黑马程序员---OC学习笔记之NSString的其他使用和NSMutableString的用法
- 黑马程序员--OC学习笔记
- 黑马程序员---OC autorelease
- 黑马程序员---OC学习笔记之ARC的概念及原理
- 黑马程序员---OC学习笔记之分类(Catgory)的概念及使用
- 黑马程序员---OC学习笔记之protocol概念及基本使用
- 黑马程序员---OC学习笔记之NSDictionary的介绍及使用
- 使用VS2012自带数据库发布网站
- 运用Autoconf和Automake生成Makefile的学习之路
- 天气代码调用代码示例
- 架构设计:系统间通信(7)——IO通信模型和Netty 下篇
- [WebService] the namespace on the "definitions" element, is not a valid SOAP version
- 黑马程序员---OC学习笔记之autorelease注意及错误用法
- sql语句中----删除表数据drop、truncate和delete的用法
- VC重复编译报错选项
- java 对象的集合
- [arcgis for android]arcgis for android 在 Android Studio上的环境配置
- 【转】 CodeSmith和PowerDesigner的使用安装和数据库创建(原创系列教程)
- 边界值方法案例
- Linux下chkconfig命令详解即添加服务以及两种方式启动关闭系统服务
- coco2d-x学习笔记