黑马程序员技术交流社区
标题: 继承中出现的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-21 16:17
这是很正常的,在内存中创建子对象的时候,它是以父类对象为基础的。你可以这样理解,其实子类对象中有两部分,一部分是父类对象,一部分是子类对象独有部分,只不过父类对象被隐藏了。
这是我的理解,我也没有学习底层的知识,只是一些猜测,但我觉得这样理解不会偏差太大。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |