新建工程:RetainCount,修改代码如下:
//
// main.m
// RetainCount
//
// Created by cloud on 13-3-8.
// Copyright (c) 2013年 cloud. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface RetainTracker:NSObject
@end
@implementation RetainTracker
- (id) init
{
if(self=[super init])
{
NSLog(@"init: Retain count of %d.",[self retainCount]);
}
return self;
}
- (void) dealloc
{
NSLog(@"dealloc called.Bye Bye.");
[super dealloc];
}
@end
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;
}
记得要关掉Objective-C Automatic Referencing Counting,当使用alloc、new、copy时,对象引用记数加1,要调用release减少对象引用记数。当对象引用记数为0时,会自动调用回收方法dealloc。