删除dealloc中的所有子视图?

时间:2011-04-10 03:46:06

标签: iphone objective-c cocoa-touch memory-management uiview

我目前的理解是,超级视图会保留每个子视图。对于UIView的子类,我是否需要从superview中删除所有子视图作为dealloc的一部分?我目前正在发布我的IBOutlets,删除观察到的通知,以及清理任何讨厌的ivars。

或者正在移除和释放UIView的[super dealloc]的子视图部分?

2 个答案:

答案 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保留其子视图,因此它负责释放它们。您的子类不拥有这些视图(除非您明确保留它们),因此您不必担心释放它们。

所以听起来你做的是正确的事。