2012-01-02 23 views
5

我知道內存管理的基礎知識,但不知道iOS如何處理不同數據類型的內部。有些東西總是讓我覺得最好是使用NSData而不是NSMutableDataNSString而不是NSMutableString。除非代碼將在10k循環中運行,否則是否真的有任何性能差異,或者我浪費了我的時間?值得轉換NSMutable <T>到NS <T>

回答

3

在希望能夠更改內容的地方使用可變類型。否則使用不可變類型。

在某些情況下,您沒有選擇 - 例如保存NSURLRequest返回數據的數據對象:使用可變數據對象比創建大量不可變數據類型要容易得多,並將它們連接起來最後。

之後,通過分析器運行你的代碼,看看你是否應該做任何不同的事情。即創建新的不可變類型以保持對象的開銷是否比使用可變類型更有效。其他任何事情都是過早的優化。

+0

我真的在談論當我有數據,我一直在操縱一種方法,我把它傳遞給另一個。 – Echilon 2012-01-02 13:13:02

+0

@Echilon正如我所說,這取決於你在做什麼。如果要返回數據的方法需要修改,請返回一個可變對象。就我個人而言,當我傳遞它們時,我傾向於保持我的數據類型不可變。我更喜歡不變類型的屬性。讓事情更安全,並且在不同的地方獲得價值的情況下,它使調試更容易。可變/不可變的類簇具有「copy」和「mutableCopy」方法,這些方法非常方便。 – Abizern 2012-01-02 14:56:21

+1

這裏的第一句話是關鍵:想想你想對數據做什麼。如果它需要可變,那麼使它變化。 – 2012-01-04 14:25:20

0

就像你說的那樣,如果你打電話多次使用Mutable,它是唯一的價值。但是,如果你只稱它幾次,這不是任何問題。

您應該考慮替代方案,例如在較大的TableViews cellForRowAtIndexPath:方法中。使用[NSString stringWithFormat:@"%@%@", fristString, secondString],而不是*foo = [[NSMutableString alloc] init][foo append:firstString]等。

+0

TableView作爲一個例子似乎沒有多大意義,因爲緩存和重用單元格和渲染只有可見的單元格。 – vikingosegundo 2012-01-02 12:58:39

+0

根本不是,如果你通過NSMutableString構建應該顯示的字符串,我會怎​​樣。 – 2012-01-02 13:04:18

+0

我不明白你的觀點。 tableview只能在每個runloop中改變一次 - 所以不是很經常。 – vikingosegundo 2012-01-02 13:06:25