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

使用适用于 ARC 和多个开发人员的最新 iOS SDK 构建 Facebook

IOS开发 arc与非Arc代码的区别

在 sdk 5 中替换 release

支持 IOS SDK 5 的 Facebook API

禁用弧后应用程序崩溃