OC之set方法内存管理

来源:互联网 发布:数据差错检测 编辑:程序博客网 时间:2024/05/21 09:05

注意在写代码的时候,只要创建了对象,用完这个对象之后必须记得要调用release方法,要使用这个对象的时候必须调用retain方法。

比如拿人看书这个例子:

首先有一个人p1看书b,

Person *p1 = [[Person alloc]init];//p1计数器=1

Book *b = [[Book alloc] init];//b计数器=1

[p1 setBook:b]; //b计数器=2

[p1 release]; //p1计数器=0

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

}

0 0
原创粉丝点击