Iphone 解除锁定时内存泄漏

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

我是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;
}

请帮帮我。谢谢您……

无需从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开发,那就太好了