我是iPhone开发的新手。 我在我的NIB文件中使用了UIView,UIImageView,UIScrollView等。 我的问题是,我可以从SuperView中删除所有视图吗? 例如:`
-(void)dealloc
{
[super dealloc];
[imageView removeFromSuperview];
[View1 removeFromSuperview];
[View2 removeFromSuperview];
[ScrollView removeFromSuperview];
[imageView release];
[View1 release];
[View2 release];
[ScrollView release];
imageView = nil;
View1 = nil;
View2 = nil;
ScrollView = nil;
}
请帮帮我。谢谢你...
答案 0 :(得分:4)
您需要将[super dealloc];
称为最后事物,而不是第一个。那是因为[super dealloc]
清理了你的对象,之后访问实例变量是未定义的行为:任何事情都可能发生。例如,[super dealloc]
可以将所有实例变量设置为nil
,在这种情况下,以下release
调用不会产生任何影响(从而导致泄漏)。此外,无需将实例变量设置为nil
,因为您无论如何都不会使用它们。所以你需要的只是:
-(void)dealloc
{
[imageView release];
[View1 release];
[View2 release];
[ScrollView release];
[super dealloc];
}
还有一些注意事项:removeFromSuperview
调用无害,但不必要,这由[super dealloc]
隐式完成。你应该坚持Apples命名约定,在你的情况下,你不应该用大写字母开始变量名。因此它应该是scrollView
而不是ScrollView
。
答案 1 :(得分:1)
无需从superview中删除这些子视图,因为无论如何你都要发布superview本身。
您可以按如下方式设置dealloc
。
-(void)dealloc{
[imageView release];
[View1 release];
[View2 release];
[ScrollView release];
imageView = nil;
View1 = nil;
View2 = nil;
ScrollView = nil;
[super dealloc];
}
请注意,[super dealloc]
位于最后(More info)。
答案 2 :(得分:0)
您可能希望在项目中启用ARC。您不再需要释放这些对象了;系统将负责(大部分)您的内存管理。
您可以在此处详细了解ARC:http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html