您当前的位置: 首页 >  清风清晨 objective-c

【setter方法内存管理之二 Objective-C语言】

清风清晨 发布时间:2022-08-16 16:49:43 ,浏览量:3

前言

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

关注
打赏
查看更多评论

清风清晨

暂无认证

  • 3浏览

    0关注

    70博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录