标签:
//错解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 }
标签:
原文地址:http://www.cnblogs.com/damon-sf/p/4955231.html