2010-07-23 52 views
2

有以下兩個代碼段之間的任何實際的區別:Objective-C的移動陣列(內存管理)之間的項目

NSObject * obj = [[_mutableArrayOne objectAtIndex:i] retain]; 
[_mutableArrayOne removeObject:obj]; 
[_mutableArrayTwo addObject:obj]; 
[obj release];

NSObject * obj = [_mutableArrayOne objectAtIndex:i]; 
[_mutableArrayTwo addObject:obj]; 
[_mutableArrayOne removeObject:obj]; 

回答

1

只有額外的保留/釋放週期,你要求它這樣做。

它可能會在時間敏感處理循環內產生一些性能影響?

+0

謝謝。這幾乎是我的想法。 – Steve 2010-07-23 02:20:55

+0

removeObject刪除所有的事件 - 在第二種情況下,你將不會有可變數組中的'objec'......看到我的答案... – 2010-07-23 02:22:38

+0

這是公然不真實的。在第二種情況下,當對象在* both *數組中時,有一小段時間窗口。在多線程環境中,這可能是一個問題(相反,讓數組中的對象也可能成爲問題)。 – JeremyP 2010-07-23 09:35:32

1

除了需要撥打retainrelease兩次而不是一次,沒有。最終結果是一樣的。

1

如果你想擁有索引'i'中的對象,然後從數組中刪除對象,然後你可以將它添加回項目後期階段的數組。

我建議選項2應該小心:對象將不再在陣列中。

結果是不同的 - 選項1你將不得不在可變陣列和選項2「對象」將不會在陣列的「對象」(的removeObject除去所有實例)

+0

不知道我是否正確理解你。你能詳細說明一下嗎? – Steve 2010-07-23 02:22:20

+0

removeObject刪除所有的事件 在你的第二種情況下,你首先添加'obj'的出現,然後在數組中會有重複的條目,然後你要求使用'removeObject'刪除'obj'的事件,這將刪除所有出現蘋果蘋果文檔)的數組中'obj',所以沒有更多的'obj'不存在於數組中 但在1例obj將出現在數組的末尾。 – 2010-07-23 02:29:33

+0

對不起,我錯過了一些細節,實際上兩者都是一樣的 – 2010-07-23 02:37:02

1

兩者都是相同的相對於Memory Management和編程邏輯。只有在第一種情況下,您必須操作一對額外的retain/release操作。