我知道內存管理的基礎知識,但不知道iOS如何處理不同數據類型的內部。有些東西總是讓我覺得最好是使用NSData
而不是NSMutableData
或NSString
而不是NSMutableString
。除非代碼將在10k循環中運行,否則是否真的有任何性能差異,或者我浪費了我的時間?值得轉換NSMutable <T>到NS <T>
回答
在希望能夠更改內容的地方使用可變類型。否則使用不可變類型。
在某些情況下,您沒有選擇 - 例如保存NSURLRequest返回數據的數據對象:使用可變數據對象比創建大量不可變數據類型要容易得多,並將它們連接起來最後。
之後,通過分析器運行你的代碼,看看你是否應該做任何不同的事情。即創建新的不可變類型以保持對象的開銷是否比使用可變類型更有效。其他任何事情都是過早的優化。
就像你說的那樣,如果你打電話多次使用Mutable,它是唯一的價值。但是,如果你只稱它幾次,這不是任何問題。
您應該考慮替代方案,例如在較大的TableViews cellForRowAtIndexPath:
方法中。使用[NSString stringWithFormat:@"%@%@", fristString, secondString]
,而不是*foo = [[NSMutableString alloc] init]
和[foo append:firstString]
等。
TableView作爲一個例子似乎沒有多大意義,因爲緩存和重用單元格和渲染只有可見的單元格。 – vikingosegundo 2012-01-02 12:58:39
根本不是,如果你通過NSMutableString構建應該顯示的字符串,我會怎樣。 – 2012-01-02 13:04:18
我不明白你的觀點。 tableview只能在每個runloop中改變一次 - 所以不是很經常。 – vikingosegundo 2012-01-02 13:06:25
- 1. 無法從AD獲得TGT
- 2. 部隊更新TGT
- 3. 使用服務負責人獲得TGT
- 4. 不能設置爲空的特性「TGT」
- 5. GSSManager.createCredential如何獲取Kerberos密鑰和TGT?
- 6. 由TGT創建iSCSI目標不能
- 7. 「在LSA中未找到TGT」的所有可能原因
- 8. 轉換所有<?到<?php
- 9. MIT Kerberos無法在MSLSA緩存中找到TGT
- 10. sqoop導入 - GSS啓動失敗 - 無法找到任何Kerberos tgt
- 11. laravel「<」轉換爲「<」
- 12. 轉換「任務<IList<T>>」到「的IList <T>」
- 13. wp_editor總是轉換<br>到<p> </p>
- 14. 轉換自PCollection <TableRow>到PCollection <KV<K,V>>
- 15. 轉換IEnumerable <Task<T>>到IObservable <T>
- 16. 無法轉換<p> <到<, >等ckeditor
- 17. 將值轉換爲2 <sup>值</sup>
- 18. 儘管allowtgtsessionkey註冊表項無法檢索TGT
- 19. 在C++上的Windows客戶端上獲取Kerberos tgt
- 20. Django CAS和TGT(Ticket Granting Tickets)和服務票證驗證
- 21. 轉換<和>
- 22. 無法從LSA緩存中獲取TGT票據
- 23. 錯誤與Cas SERVICE_TICKET_NOT_CREATED和TGT與JBoss 5.1.0一起銷燬.GA
- 24. com.fatwire.wem.sso.SSOException:無法獲取TGT。 HTTP響應代碼400
- 25. lxml將「<」轉換爲<。爲什麼?
- 26. 轉換&LT至<xml文檔
- 27. <在SQL Server中轉換爲<
- 28. 將inout值轉換爲UnsafeMutablePointer <非託管<TYPE>?>
- 29. 值不能轉換爲<typename>
- 30. 轉換ArrayList的<Object>值[]
我真的在談論當我有數據,我一直在操縱一種方法,我把它傳遞給另一個。 – Echilon 2012-01-02 13:13:02
@Echilon正如我所說,這取決於你在做什麼。如果要返回數據的方法需要修改,請返回一個可變對象。就我個人而言,當我傳遞它們時,我傾向於保持我的數據類型不可變。我更喜歡不變類型的屬性。讓事情更安全,並且在不同的地方獲得價值的情況下,它使調試更容易。可變/不可變的類簇具有「copy」和「mutableCopy」方法,這些方法非常方便。 – Abizern 2012-01-02 14:56:21
這裏的第一句話是關鍵:想想你想對數據做什麼。如果它需要可變,那麼使它變化。 – 2012-01-04 14:25:20