我有一个关于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]是否足以处理所有事情或者是否泄漏?
非常感谢!我感谢任何帮助!
答案 0 :(得分:0)
(请注意,在非ARC版本中,您需要autorelease
之前的removeFromSuperview
。
我想知道类似的事情。 “危险”是指在没有先执行removeFromSuperview
的情况下执行autorelease
时,即使在方法结束之前,也会立即取消分配对象。这很愚蠢。
我的想法是你让方法返回self
。在非ARC情况下,您可以使用autorelease
创建此指针,但ARC应该为您执行此操作。您可能不需要调用者中的指针,但我相信这将迫使ARC执行您想要的操作。