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

清风清晨

暂无认证

  • 1浏览

    0关注

    71博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

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

前言

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

关注
打赏
1663943137
查看更多评论
立即登录/注册

微信扫码登录

0.0348s