我目前的理解是,超级视图会保留每个子视图。对于UIView的子类,我是否需要从superview中删除所有子视图作为dealloc的一部分?我目前正在发布我的IBOutlets,删除观察到的通知,以及清理任何讨厌的ivars。
或者正在移除和释放UIView的[super dealloc]的子视图部分?
答案 0 :(得分:4)
作为视图dealloc的一部分,子视图会自动删除。所以你不需要删除它们。但是,如果您的视图保留了其任何子视图[除了自动保留],您应该在dealloc期间释放它们。
例如,假设您的视图包含以下代码:
[header file]
UILabel *myLabel;
@property (nonatomic, retain) UILabel *myLabel;
[实施档案]
someLabel = [[UILabel alloc]initWithFrame: someFrame];
[self addSubview: someLabel];
self.myLabel = someLabel;
[someLabel release]; // now retained twice, once by the property and once as a subview
someButton = [[UIButton alloc]initWithFrame: someOtherFrame];
[self addSubview: someButton];
[someButton release]; // retained once as it is a subview
那么你的dealloc方法看起来像这样:
- (void) dealloc {
[myLabel release];
[super dealloc];
}
答案 1 :(得分:3)
UIView保留其子视图,因此它负责释放它们。您的子类不拥有这些视图(除非您明确保留它们),因此您不必担心释放它们。
所以听起来你做的是正确的事。