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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© starl126 中级黑马   /  2014-12-20 12:50  /  847 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家在内存管理时遇到果这样的情形没有:有2个类:Car和Bus类,Bus类继承了Car类,两个类中都是非oc对象成员;当按照规范写alloc和release和dealloc时,会导致输出结果:对象Car被销毁了,输出2次;但是我们知道Car对象的饮用计数器
只有1,代码如下:
void test1(){

    Car *c = [[Car alloc] init];

    Bus * b = [[Bus alloc] init];


    NSLog(@"%ld",[b retainCount]);
    NSLog(@"%ld",[c retainCount]);
    [b release];
    [c release];

}
int main() {

    test1();

    return 0;
}
@implementation Car

- (void)dealloc{

    NSLog(@"Car对象被销毁了。");
    [super dealloc];
}
@end
@implementation Bus

- (void)dealloc{

    NSLog(@"Bus对象被销毁了。");
    [super dealloc];
}

@end
这种现象很特殊,大家有什么办法解决没有?


3 个回复

倒序浏览
bus里dealloc里调用这句[super dealloc];后会执行Car 的dealloc所以就输出了两次 没啥问题
回复 使用道具 举报
从今以后 发表于 2014-12-20 13:17
bus里dealloc里调用这句[super dealloc];后会执行Car 的dealloc所以就输出了两次 没啥问题 ...

我当然知道是两次,这种规范对继承貌似不行,有办法解决没有?
回复 使用道具 举报
这是很正常的,在内存中创建子对象的时候,它是以父类对象为基础的。你可以这样理解,其实子类对象中有两部分,一部分是父类对象,一部分是子类对象独有部分,只不过父类对象被隐藏了。
这是我的理解,我也没有学习底层的知识,只是一些猜测,但我觉得这样理解不会偏差太大。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马