Object-C中的内存管理小记

//错解1:内存泄露

1 - (void)setObj:(Object *)newObj {
2     obj = [newObj retain];
3 }

  当新旧对象指向不同时,执行这段代码后,obj会指向另一个对象,而它之前指向的对象没有得到释放

//错解2:内存可能泄露

 - (void)setObj:(Object *)newObj {
    [obj release];
    obj = [newObj retain];
}

  当新旧对象指向相同时,执行[obj release];后,内存已经释放,再对newObj发送消息,就可能使程序崩溃

//正解1

- (void)setObj:(Object *)newObj {
    [obj autorelease];
    obj = [newObj retain];
}

//正解2

1  - (void)setObj:(Object *)newObj {
2      if(obj != newObj) {
3          [obj release];   
4         obj = [newObj retain];
5     }    
6 }    

 

posted @ 2015-11-11 09:38  阿赖耶云  阅读(131)  评论(0编辑  收藏  举报