Objective-c自学笔记(4)-内存管理中retain和release

学习的时候碰到了如下的例子:


#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 // RetainTracker



int 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] 2
2015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 3
2015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 2
2015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 1
2015-01-28 22:32:54.171 09.01 RetainCount-1[620:23479] 2
2015-01-28 22:32:54.172 09.01 RetainCount-1[620:23479] 1
2015-01-28 22:32:54.172 09.01 RetainCount-1[620:23479] dealloc called. Bye Bye.
Program ended with exit code: 0



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值