本文展示Objective-C中四个和对象生命周期有关的方法。
Objective-C采用引用计数来管理对象,当调用类的alloc,new,copy方法时,对象产生,并且对象的引用计数为1。每次调用retain方法,对象的引用计数增加1。每次调用release方法,对象的引用计数减少1。当对象的引用计数为0的时候,系统调用dealloc释放对象。我们可以通过retainCount得到对象的当前引用计数。
#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]);
NSLog (@"********");
[tracker release]; // count: 0, dealloc it
NSLog (@"!!!!!!!!");
return (0);
} // main
补充说明:我是在Xcode4.2.1上运行的此代码,在敲上去以后,会有很多地方报错,网上查了一下,好像是苹果新增加的一个ARC机制。估计会Java里面的eclipse设置一个吊样。修改方式是把Build Setting里面的Objective-C Automatic Reference Co⋯⋯设置为NO。