1

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

请帮助我。谢谢...

4

3 回答 3

4

您需要调用[super dealloc];作为最后一件事,而不是first。那是因为[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.

于 2012-06-04T06:36:20.200 回答
1

无需从超级视图中删除这些子视图,因为无论如何您都将发布超级视图本身。

您可以进行dealloc如下操作。

-(void)dealloc{

    [imageView release];
    [View1 release];
    [View2 release];
    [ScrollView release];

    imageView = nil;
    View1 = nil;
    View2 = nil;
    ScrollView = nil;

    [super dealloc];
}

请注意,[super dealloc]在最后(更多信息)。

于 2012-06-04T06:31:20.027 回答
0

您可能希望在您的项目中启用 ARC。您不再需要释放这些对象;系统将负责(大部分)您的内存管理。

您可以在此处阅读有关 ARC 的更多信息:http: //developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

于 2012-06-04T06:34:14.000 回答