前言
上一讲,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
