Iphone 解除锁定时内存泄漏
我是iPhone开发新手。 我在我的NIB文件中使用了UIView、UIImageView、UIScrollView等。 我的问题是,我可以从SuperView中删除所有视图吗? 例如:`Iphone 解除锁定时内存泄漏,iphone,memory-management,memory-leaks,Iphone,Memory Management,Memory Leaks,我是iPhone开发新手。 我在我的NIB文件中使用了UIView、UIImageView、UIScrollView等。 我的问题是,我可以从SuperView中删除所有视图吗? 例如:` -(void)dealloc { [super dealloc]; [imageView removeFromSuperview]; [View1 removeFromSuperview]; [View2 removeFromSuperview]; [Scr
-(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;
}
请帮帮我。谢谢您……无需从superview中删除这些子视图,因为无论如何您都将发布superview本身 您可以按如下方式进行解除锁定
-(void)dealloc{
[imageView release];
[View1 release];
[View2 release];
[ScrollView release];
imageView = nil;
View1 = nil;
View2 = nil;
ScrollView = nil;
[super dealloc];
}
请注意,[super dealoc]位于末尾。无需从superview中删除这些子视图,因为无论如何您都将释放superview本身 您可以按如下方式进行解除锁定
-(void)dealloc{
[imageView release];
[View1 release];
[View2 release];
[ScrollView release];
imageView = nil;
View1 = nil;
View2 = nil;
ScrollView = nil;
[super dealloc];
}
请注意,[super dealoc]位于末尾。您可能希望在项目中启用ARC。您将不再需要释放这些对象;系统将负责您的大部分内存管理
您可以在此处阅读有关ARC的更多信息:您可能希望在项目中启用ARC。您将不再需要释放这些对象;系统将负责您的大部分内存管理 您可以在此处阅读有关ARC的更多信息:您需要致电[super dealoc];作为最后一件事,而不是第一件事。这是因为[super dealoc]清理对象,之后访问实例变量是未定义的行为:任何事情都可能发生。例如,[super dealoc]可以将所有实例变量设置为nil,在这种情况下,下面的发布调用根本没有效果,因此会导致泄漏。此外,不需要将实例变量设置为nil,因为您无论如何都不会使用它们。因此,您所需要的是:
-(void)dealloc
{
[imageView release];
[View1 release];
[View2 release];
[ScrollView release];
[super dealloc];
}
还有几点注意:removeFromSuperview调用是无害的,但没有必要,这是由[super dealloc]隐式完成的。你应该坚持苹果的命名惯例,这意味着你不应该以大写字母开始变量名。所以它应该是scrollView而不是scrollView。您需要调用[super dealoc];作为最后一件事,而不是第一件事。这是因为[super dealoc]清理对象,之后访问实例变量是未定义的行为:任何事情都可能发生。例如,[super dealoc]可以将所有实例变量设置为nil,在这种情况下,下面的发布调用根本没有效果,因此会导致泄漏。此外,不需要将实例变量设置为nil,因为您无论如何都不会使用它们。因此,您所需要的是:
-(void)dealloc
{
[imageView release];
[View1 release];
[View2 release];
[ScrollView release];
[super dealloc];
}
还有几点注意:removeFromSuperview调用是无害的,但没有必要,这是由[super dealloc]隐式完成的。你应该坚持苹果的命名惯例,这意味着你不应该以大写字母开始变量名。所以它应该是scrollView而不是scrollView。谢谢阿赫拉……但我为什么要在结尾写[super Dealoc]呢?我的意思是如果我在顶部写[super Dealoc],那么会发生什么,如果我在结尾写,那么会发生什么?谢谢阿赫拉……但我为什么要在结尾写[super Dealoc]呢?我的意思是如果我写[super Dealoc]如果你只想修复一个简单的内存泄漏,那么在现有项目中启用ARC有点过火了。但是如果你开始进行iOS开发,就像这个人在现有项目中启用ARC,如果你只想修复一个简单的内存泄漏,那就有点过火了内存泄漏。但如果你像这个人一样开始iOS开发,那就太好了