在OC中MRC下,多个对象的内存泄露问题之:人中途换车问题
1.人第"1"次使用set方法赋值 第一次把byd赋值给人的_car
2.人第"2"次使用set方法赋值 第二次把byd赋值给人的_car
1.人第"3"次使用set方法赋值 第一次把bigben赋值给人的_car
1.byd _car = nil _car != byd; 由于_car为nil [_car release]相当于[nil release] 之后[_car retain]; byd+1
2.byd _car = byd _car == byd if语句不执行,相当于没执行setCar方法的功能
3.bigBen _car = byd byd != bigBen _car(byd) -1 _car = bigBen (bigBen) + 1
如果只执行了第1步或者第1第2步 则:
dealloc方法中: [_car release]; 当前 _car = byd _car (byd) -1
如果只执行了第1,2,3步 则:
dealloc方法中: [_car release]; 当前 _car = bigBen _car (bigBen) -1
-(void)setCar:(Car *)car{
if(_car != car){ // _car != car _car实例变量 != car参数
[_car release];
// _car = [car retain]; // ---> _car = car; [_car retain];
_car = car;
[_car retain];
}
}
#判断是否是同一个对象,release旧值,retain新值 |
|