详细讲述在采用引用计数的内存回收方式的工作原理

详细讲述在采用引用计数的内存回收方式的工作原理

ID:20030866

大小:64.00 KB

页数:5页

时间:2018-10-09

详细讲述在采用引用计数的内存回收方式的工作原理_第1页
详细讲述在采用引用计数的内存回收方式的工作原理_第2页
详细讲述在采用引用计数的内存回收方式的工作原理_第3页
详细讲述在采用引用计数的内存回收方式的工作原理_第4页
详细讲述在采用引用计数的内存回收方式的工作原理_第5页
资源描述:

《详细讲述在采用引用计数的内存回收方式的工作原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、Objective-C的内存回收机制在Objective-C中采用的是引用计数的内存回收方式。凡是继承NSObject的类生成的对象,当对象的计数为0,会对对象执行dealloc并回收。  二、alloc,retain,release1、alloc:用来分配内存,在利用alloc生成分配了一个对象内存后,该对象的引用计数是1。   如:ClassA *obj = [[ClassA alloc] init];      //retainCount 为1    2、release:用来将对象的引用计数减一,当我们不在需要这个对象调用obj的release方法使引用计数变为0

2、,obj的dealloc方法会被自动调用。    接上例:[obj release]; //retainCount 减一变为0,obj的dealloc会被调用     3、retain:用来将对象的引用计数加一。    如:ClassA *obj = [[ClassA alloc] init];      //retainCount 为1[obj retain];                            //retainCount为2//do something[obj release];                           //retainC

3、ount为1[obj release];                           //retainCount为0,调用dealloc 对象释放     在这个环节上容易出的错误:ClassA *obj1 = [[ClassA alloc] init];      //ClassA里面有个 名为hello的functionClassA *obj2 = obj1;//do something with obj1 and obj2[obj1 hello];[obj1 release];                //对象已经释放掉了 [obj2 hello];  

4、                 //崩溃,obj2已经是野指针了[obj2 release]; 三、autorelease,NSAutoreleasePool和工厂方法           1、NSAutoreleasePool:在开发的过程中会出现内存申请者经常会出现内存申请者和内存使用者之间的交互问题,比如,一个函数内部申请了内存,做了一些操作,然后返回这块内存。这个时候调用者要负责对这块内存执行清理工作,在调用栈很深的情况下,很容易产生内存泄露。而且这种内存解决方案破坏了内存由谁生成由谁释放的原则。           为了解决这个问题,产生了NSAutorelea

5、sePool。使用方法如下: NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //创建一个release poolClassA *obj = [[[http://www.cp061.comalloc] init] autorelease];   //创建一个对象并将它加入release pool[obj retainCount];           //retainCount为1//do something[pool release];                 //在release pool

6、被释放的时候将obj的引用计数自动减一,这时                               //obj的releaseCount变为了0,obj被释放           对象在被autorelease时他的引用计数并没有立即减少,而是在releasepool被释放的时候引用计数才减一的。在对象被    2、工厂方法:在UIKit提供的类中经常会看到static方法创建出的对象,如:NSNumber *numObj = [NSNumber numberWithInt: 1];    从设计模式的角度上讲这个static方法创建了,一个对象,这中利用公共方法创建

7、对象的模式叫做工厂方法。    在Objective-C中的程序设计中有个规则,就是这种工厂方法返回的对象都是不需要调用者release的,因为虽然他们现在的引用计数为1,但是他会自动释放。(因为他们在返回对象的时候都对其调用了autorelease)    3、深入讲解NSAutoreleasePool   NSAutoreleasePool是苹果公司实现的类,我们无法知道他是怎么实现的,但是可以确定的是,在对象调用autorelease的时候,距离对象最近的NSAutoreleasePool将记录该对象,并在a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。