【问题标题】:Reassigning properties when using ARC使用 ARC 时重新分配属性
【发布时间】:2012-03-16 07:41:39
【问题描述】:

我有一个带有各种控件的表单。其中一个控件允许用户通过点击控件后出现的模式视图来更改正在提交的表单的类别。当用户选择更改表单的类别时,表单需要根据新的类别重新显示控件。

除了从表单视图中删除以前的控件之外,关于被丢弃的控件还有什么需要担心的吗?考虑表单实现的以下方法:

- (void)showControls
    self.controls = [NSMutableArray array];

    for(UIControl *control in self.dataSource.controls){
        [self.controls addObject:control];
        [self.view addSubview:control];
    }
}

如果我多次调用此方法(因为用户更改了表单类别,如前所述),我假设它会导致各种 NSMutableArrays 浮动而没有任何引用它们的指针。这可以吗?我使用的是 ARC,它会自动收集那些“丢失”的数组吗?

【问题讨论】:

    标签: objective-c ios cocoa-touch memory-management automatic-ref-counting


    【解决方案1】:

    ARC 不会“收集”任何东西。此外,您在那里所做的事情与使用 ARC 完全无关。您正在使用 control 属性的设置器,其工作方式与 ARC 之前相同。它将释放旧值并保留新值。因此,除非您对 self.controls 做一些奇怪的事情,否则您应该不会对“丢失”的数组有任何问题。

    【讨论】:

    • 我在帖子的最后说错了。我所说的“收集”是指垃圾收集器。如果我没有通过设置器访问controls 而是直接重新分配给属性(即controls = [NSMutableArray array])怎么办?如果没有 ARC,那肯定会导致内存泄漏,但是用它呢?
    • ARC 没有垃圾收集器 - 对不起,我不太明白你对收集的意思。不过,您所说的,在没有 ARC 的情况下直接访问 ivar 确实可能会泄漏或无法正确保留,但使用 ARC 则不会发生。
    • 抱歉,我的术语已关闭。我真的只是想知道在使用 ARC 和直接分配时这些对象是否会被正确释放。这个问题已经回答了。谢谢!
    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多