黑马程序员技术交流社区

标题: 继承中出现的dealloc输出went [打印本页]

作者: starl126    时间: 2014-12-20 12:50
标题: 继承中出现的dealloc输出went
大家在内存管理时遇到果这样的情形没有:有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
这种现象很特殊,大家有什么办法解决没有?



作者: 从今以后    时间: 2014-12-20 13:17
bus里dealloc里调用这句[super dealloc];后会执行Car 的dealloc所以就输出了两次 没啥问题
作者: starl126    时间: 2014-12-21 15:43
从今以后 发表于 2014-12-20 13:17
bus里dealloc里调用这句[super dealloc];后会执行Car 的dealloc所以就输出了两次 没啥问题 ...

我当然知道是两次,这种规范对继承貌似不行,有办法解决没有?
作者: 完美世界    时间: 2014-12-21 16:17
这是很正常的,在内存中创建子对象的时候,它是以父类对象为基础的。你可以这样理解,其实子类对象中有两部分,一部分是父类对象,一部分是子类对象独有部分,只不过父类对象被隐藏了。
这是我的理解,我也没有学习底层的知识,只是一些猜测,但我觉得这样理解不会偏差太大。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2