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