2008-12-18 50 views
2

当编写一个抽象类或者一个没有直接实例化的类时......你倾向于在抽象类中编写一个dealloc方法,并在适当的时候释放,然后允许孩子调用[super dealloc],然后担心它们添加的不是超类的一部分的实例变量?Cocoa中的抽象类内存管理

你如何用抽象类来管理内存?

我想沿着线的东西:

@interface ClassA : NSObject { 
    NSArray *foo; 
} 
@end 

@implementation ClassA 
- (void) dealloc { 
    [foo release]; 
    [super dealloc]; 
} 
@end 

@interface ClassB : ClassA { 
    NSArray *bar; 
} 
@end 

@implementation ClassB 
- (void) dealloc { 
    [bar release]; 
    [super dealloc]; 
} 
@end 

请原谅任何语法错误,我只是写这件事的飞行。上述内容是否有意义,或者内存管理方式不同? GC不是我的选择,因为我在iPhone上这样做。

回答

10

是的,你为自己承担责任,而不是超级或亚类。

2

说同样的事情,斯蒂芬,但是从不同的角度:避免将allocrelease在不同的地方尽可能地(initdealloc是主要例外)。对于把它们放在不同的类中,这是双倍的,就像在你的类和它的超类中一样。

超类不应该释放其子类创建的对象。