iOS SDK:ARC removeFromSuperview

时间:2012-01-26 19:28:27

标签: ios view uiview automatic-ref-counting

我有一个关于ARC的简单问题。如果用户在UIViewController中使用addSuperView点击按钮,我会显示UIView。 UIView包含一个关闭按钮,如果点击我想删除视图。

在屏幕外观看动画后,我曾经在UIViewController中调用一个方法:

- (void)viewDidClose:(UIView *)view
{
     [view removeFromSuperview];
     [view release], view = nil;
}

现在使用ARC我将其更改为:

- (void)viewDidClose:(UIView *)view
{
     [view removeFromSuperview];
     view = nil;
}

现在的问题是:我想删除协议和委托给视图控制器,并在UIView本身内执行此操作。

预ARC(在视图中):

- (void)didStop
{
     [self removeFromSuperview];
     [self autorelease];
}

我不能在ARC中使用'autorelease'也不能设置'self = nil',据我所知,只要我将视图设置为nil或替换它,ARC就会到位,但如果我不这样做会怎样代替它? [查看removeFromSuperview]是否足以处理所有事情或者是否泄漏?

非常感谢!我感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

(请注意,在非ARC版本中,您需要autorelease之前的removeFromSuperview

我想知道类似的事情。 “危险”是指在没有先执行removeFromSuperview的情况下执行autorelease时,即使在方法结束之前,也会立即取消分配对象。这很愚蠢。

我的想法是你让方法返回self。在非ARC情况下,您可以使用autorelease创建此指针,但ARC应该为您执行此操作。您可能不需要调用者中的指针,但我相信这将迫使ARC执行您想要的操作。