iOS SDK : ARC removeFromSuperview

标签 ios view uiview automatic-ref-counting

我有一个关于 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/

相关文章:

ios - Xcode 4.2 不输出退出代码?

ios - 当键盘出现 ios 时,textview 在横向 View 中缩小

ios - 当 View 出现时执行函数 - Swift

ios - Swift 动画外壳不会动画

ios - 使用自动布局调整 subview 的大小

iphone - 我如何使用 CoreGraphics 绘制半圆

IOS:nsstring留一些空格

在 VIEW 中使用的 Mysql 函数不会返回正确的结果。

ios - 将 UIView.transform 设置为任意平移 CGAffineTransform 不会执行任何操作

ios - 我什么时候需要在 iOS 中调用 setNeedsDisplay?