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];

}

相关文章
相关标签/搜索