A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在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新值

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马