Objective-c自学笔记(4)-内存管理中retain和release
来源:互联网 发布:linux下关闭tomcat 编辑:程序博客网 时间:2024/05/16 18:22
学习的时候碰到了如下的例子:
#import <Foundation/Foundation.h>@interface RetainTracker : NSObject@end // RetainTracker@implementation RetainTracker- (id) init{if (self = [super init]) {NSLog (@"init: Retain count of %d.", [self retainCount]);}return (self);} // init- (void) dealloc{NSLog (@"dealloc called. Bye Bye.");[super dealloc];} // dealloc@end // RetainTrackerint main (int argc, const char * argv[]){ RetainTracker *tracker = [RetainTracker new]; // count: 1 [tracker retain]; // count: 2 NSLog (@"%d", [tracker retainCount]); [tracker retain]; // count: 3 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count: 2 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count: 1 NSLog (@"%d", [tracker retainCount]); [tracker retain]; // count 2 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count 1 NSLog (@"%d", [tracker retainCount]); [tracker release]; // count: 0, dealloc it return (0);} // main
这是一个讲解引用计数器最最简单的例子,也是最基础的。
知识点如下:
1.当一个对象调用alloc,new,copy方法时,引用计数器的值会加1。
2.当一个对象调用release方法时,引用计数器的值会减1。
3.当引用计数器变为0的时候,对象自己会调用dealloc方法。
4.要想获得引用计数器的值,可以调用retainCount方法来获得。
5.要想自主的将计数器的值加1,可以通过调用retain方法实现。
所以上面的代码中,用到了new方法来创建对象,计数器会自动加1。调用retain方法也会让计数器加1。release的时候计数器就会减1。当计数器的值为0的时候,就会调用dealloc方法。所以上面的代码输出才会是下面的样子:
2015-01-28 22:32:54.170 09.01 RetainCount-1[620:23479] init: Retain count of 1.2015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 22015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 32015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 22015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 12015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 22015-01-28 22:32:54.172 09.01 RetainCount-1[620:23479] 12015-01-28 22:32:54.172 09.01 RetainCount-1[620:23479] dealloc called. Bye Bye.Program ended with exit code: 0
0 0
- Objective-c自学笔记(4)-内存管理中retain和release
- Objective-C 内存管理retain和release
- Objective-c 内存管理-MRC retain&release
- OC学习笔记-内存管理、retain、release和retainCount
- Objective-c的内存管理问题(copy和retain)
- cocos2d-x内存管理retain和release
- 内存管理1retain和release
- 内存管理中的retain和release用法
- Objective-C内存管理中的Retain Circle
- Objective-C - retain release autorelease
- Objective-C - retain release autorelease
- ios笔记--retain,release介绍和setter方法的内存管理笔记
- cocos2d-x和objective-c中的retain()和release()
- IOS开发基础Object-C(07)—OC内存管理(1)-retain和release
- OC学习笔记四-1 内存管理(Retain-Release)
- Cocos2d-x 内存管理中retain() 、autoRelease()、release()
- Cocos2d-x 内存管理中retain() 、autoRelease()、release()
- Cocos2d-x 内存管理中retain() 、autoRelease()、release()
- Unity 导出切片精灵过程浅析
- online_judge_1108
- 内存分配函数malloc 与 calloc的用法及区别
- 1072. Gas Station (30)
- android:人品计算器—第一个demo
- Objective-c自学笔记(4)-内存管理中retain和release
- Spring——HibernateTemplate、hibernateDaoTemplate
- Android 入门问题与解决(一)Please ensure that adb is correctly located at...
- 学会阅读java字节码
- 使用JDK自带的JCX生成JAVA
- 二分图最大匹配总结(转)
- 远程配置Eclipse 调试JBOSS
- IOS 点击空白处隐藏键盘的几种方法
- Programmatic authentication and certificate handling for Rational Team Concert 2.0.