对象的生命周期以下:函数
一、生成并本身持有对象 引用计数+1 code
使用alloc、new、copy、mutableCopy名称开头的方法,意味着本身生成的对象本身也持有。orm
但不是绝对的,以下对象
NSObject *object= [NSObject new];//retainCount=1 NSArray *object= [NSArray new];//retainCount=-1
二、持有对象(retain) 引用计数+1生命周期
三、释放对象(release) 引用计数-1it
四、废弃对象 (alloc)table
上面的描述用代码表示就清楚了,以下:test
NSObject*object = [NSObject new];//1 [object retain];//2 NSLog(@"%d ", object.retainCount); [object release];//1 NSLog(@"%d ", object.retainCount); [object release];// 0 //[object release];
对象持有引用计数+1,释放引用计数-1,当引用计数=0时,对象释放。貌似很简单,一两句话就能够归纳清楚。可是当多个实体拥有某个对象时,对象的全部权就变得复杂了。object
- (NSString*)myString { NSString *str = [[NSString alloc] initWithFormat:@"test"]; [str retain]; return str; }
像这种状况,究竟谁释放?
若是在myString里面释放。那么myString函数外面就无法使用对象了,由于已经被释放了。
那如何是函数外面释放,意味着调用者要负责处理。这样一来,有点不方便。
因此这时候应该用自动释放(autorelease)来释放对象:引用
- (NSString*)myString { NSString *str = [[NSString alloc] initWithFormat:@"test"]; [str autorelease]; return str; }