2

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

除了从表单的视图中删除以前的控件,有什么我需要担心的关于被丢弃的控件?认为形式实现了以下方法:

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

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

如果我把这种方法多次(因为用户改变了形式类别,如前面所述),我认为它会导致各种NSMutableArrays浮动周围没有任何指针是引用它们。这可以吗?我使用ARC,它会自动收集那些“丢失”数组?

回答

4

ARC不会“收集”任何东西。此外,你在那里做的事情与ARC正在使用的是毫不相干的。您正在使用设置器的control属性,该属性将以与ARC之前相同的方式工作。它将释放旧值并保留新值。所以,你不应该对阵列“丢失”有任何问题,除非你做了奇怪的事情self.controls比你所示。

+0

我在我的文章结尾处错过了。 “收集”我的意思是指垃圾收集器。如果我没有通过setter访问'controls'并直接重新分配给属性(即'controls = [NSMutableArray array]')?如果没有ARC,那肯定会导致内存泄漏,但是怎么样呢? – maxedison 2012-02-26 21:25:01

+0

ARC没有垃圾收集器 - 抱歉,我不完全按照你的意思收集静物。你说什么,没有ARC直接访问伊娃,实际上可能泄漏或不保留,但与ARC不会发生。 – mattjgalloway 2012-02-26 21:40:11

+0

对不起,我的术语是关闭的。我真的只是想知道在使用ARC和直接分配时这些对象是否会被正确释放。这个问题已经得到解答。谢谢! – maxedison 2012-02-27 15:18:49