前言
上一讲,setter方法内存管理之一,主要是讲了setter方法中,先retain,再把retain方法的返回值赋值给下划线属性,这是属性是OC对象时候的事儿。 第二方面呢,是dealloc方法里,先把属性release掉,再调用父类的dealloc方法。 - (void)setCar:(Car *)car { _car = [ car retain]; } - (void)dealloc { [ _car release]; NSLog(@“人挂了。。。”); [ super dealloc]; } 这种方法,还是有Bug的,有什么Bug呢? 1)例如: Person *p1 = [Person new]; Car *bmw = [Car new]; bmw.speed = 200; p1.car = bmw; [p1 drive];
[bmw release];
[p1 drive];
Car *benz = [Car new];
benz.speed = 400;
p1.car = benz;
[benz release]; [p1 release]; }
这时候,你发现,奔驰可以挂,但是宝马没挂,发生了内存泄露,这是怎么回事儿呢?
一、发生内存泄露的原因1)最重要的是这句代码: p1.car = be