OC之set方法內存管理

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

- voidsetBook:(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];

}

相關文章
相關標籤/搜索