我有一个关于 ARC 的简单问题。如果用户在 UIViewController 中使用 addSuperView 点击按钮,我会显示一个 UIView。 UIView 包含一个关闭按钮,如果点击我想删除 View 。
我曾经在屏幕外动画 View 后调用 UIViewController 中的方法:
- (void)viewDidClose:(UIView *)view
{
[view removeFromSuperview];
[view release], view = nil;
}
现在使用 ARC 我将其更改为:
- (void)viewDidClose:(UIView *)view
{
[view removeFromSuperview];
view = nil;
}
现在的问题是:我想删除协议(protocol)和对 View Controller 的委托(delegate),并在 UIView 本身中执行此操作。
ARC 前(在 View 内):
- (void)didStop
{
[self removeFromSuperview];
[self autorelease];
}
我不能在 ARC 中使用“autorelease”,也不能设置“self = nil”,据我所知,一旦我将 View 设置为 nil 或替换它,ARC 就会到位,但如果我不这样做会怎样代替它? [view removeFromSuperview] 是否足以处理所有事情或是否存在泄漏?
非常感谢!感谢您的帮助!
最佳答案
(请注意,在您的非 ARC 版本中,您需要在 removeFromSuperview
之前使用 autorelease
)。
我也想知道类似的事情。 “危险”是,当您执行 removeFromSuperview
而没有先执行 autorelease
时,对象会立即释放,甚至在方法结束之前。这很滑稽。
我的想法是让方法返回 self
。在非 ARC 的情况下,您将使用 autorelease
创建此指针,但 ARC 应该为您做这件事。您可能不需要调用者中的指针,但我相信这会迫使 ARC 执行您想要的操作。
关于iOS SDK : ARC removeFromSuperview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024048/