注意在写代码的时候,只要建立了对象,用完这个对象以后必须记得要调用release方法,要使用这个对象的时候必须调用retain方法。spa
好比拿人看书这个例子:对象
首先有一我的p1看书b,it
Person *p1 = [[Person alloc]init];//p1计数器=1方法
Book *b = [[Book alloc] init];//b计数器=1di
[p1 setBook:b]; //b计数器=2co
[p1 release]; //p1计数器=0void
P1 = nil;文章
人当中有个setBook方法,让人能拿一本书去看,上述[p1 setBook:b]
就是调用了该方法,P1 = nil是清空p1,下面就是setBook方法的实现:
- (void)setBook:(Book *)book
{
/*首先要作一个判断,book=_book时,b的计数器就为1,表示传进来的仍是旧对象,不是新对象。若是此时再[ _book realease],b的计数器就为0了,后面再[bookretain]就会报错,由于b没法”死而复生“,因此必须保证book != _book*/
if(book!= _book){
[_book realease];//b计数器=1
_book= [book retain];
}
}
上述_book = [book retain]就是让人去拿一本书看,以书为参照物,就是这本书有一我的在看,[book retain]返回的就是书对象,在返回这个个新的书对象以前,应先将原来的书对象release掉,故在调用[book retain]前应先调用[ _book realease]。在最上面调用了[p1 release],说明这我的离开不看书了,因此此时应调用书的release。也就是在人这个对象被销毁的时候调用这本书的release方法,以下:
- (void)dealloc
{
[ _book release]; //b计数器=0
NSLog(@”Person对象被回收”);
[superdealloc];
}