您的位置:首页 > 移动开发 > Objective-C

OC之set方法内存管理

2015-08-31 15:02 489 查看
注意在写代码的时候,只要创建了对象,用完这个对象之后必须记得要调用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方法的实现:

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息