iOS SDK:ARC removeFromSuperview
Posted
技术标签:
【中文标题】iOS SDK:ARC removeFromSuperview【英文标题】:iOS SDK: ARC removeFromSuperview 【发布时间】:2012-01-26 19:28:26 【问题描述】:我有一个关于 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 就会到位,但如果我不这样做怎么办代替它? [view removeFromSuperview] 是否足以处理所有问题或是否会泄漏?
非常感谢!感谢您的帮助!
【问题讨论】:
【参考方案1】:(请注意,在您的非 ARC 版本中,您需要在 removeFromSuperview
之前添加 autorelease
)。
我想知道类似的事情。 '危险' 是当你在没有先执行autorelease
的情况下执行removeFromSuperview
时,即使在方法结束之前,对象也会立即被释放。太牛了。
我的想法是让方法返回self
。在非 ARC 情况下,您可以使用 autorelease
创建此指针,但 ARC 应该为您执行此操作。你可能不需要调用者中的指针,但我相信这会迫使 ARC 做你想做的事。
【讨论】:
以上是关于iOS SDK:ARC removeFromSuperview的主要内容,如果未能解决你的问题,请参考以下文章
iOS SDK:ARC removeFromSuperview