注意在寫代碼的時候,只要建立了對象,用完這個對象以後必須記得要調用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];
}