2014-01-08 31 views
0

基於Apple Docs,使用NSDocument的文件包的推薦做法似乎是保留對自定義NSDocument實現中的根NSFileWrapper的引用。NSDocument和NSFileWrapper:減少內存佔用的策略?

我的問題:這是不是意味着我的文檔會佔用兩倍的內存空間?

想象一個簡單的文檔,其中包含一個NSString實例變量text。假設文字可能非常大。

readFromFileWrapper:…我從文件包裝數據中讀取NSString並將其存儲在text中。然而,由於文件包裝是一個實例變量,它的原始NSData仍然在附近,儘管我需要的只是NSString版本。

只要我完成閱讀,是否有任何說話放棄NSFileWrapper

編輯:在思考iOS和UIDocument時,這更加有趣。我有一個包含數百個圖像的文檔。

回答

2

這是一個很好的問題,但我會直接回答。

首先,不要過早優化。如果你擁有的只是相對較小的文件,那麼你不應該擔心這個問題。你應該讓你的應用程序工作。

如果一旦您的應用程序正常工作,您會發現您的文件往往非常大(如數百兆字節),您可能會考慮優化此文件。

請記住,今天的機器通常有8GB或更多的RAM。它需要大量的數據來填補這一點。而且,通過虛擬內存,NSFileWrapper將映射到數據文件中,這意味着它們至少會在讀取時留存至內存中,但在此之後,它們可以零成本分頁(它們不需要寫回到磁盤,因爲它們已經在磁盤上)。

被佔用但可以在沒有磁盤訪問的情況下釋放的內存本質上是可用內存。

因此,當您沒有一個實際表現不佳的真實測試用例時,不要嘗試優化,因爲系統已經非常優化,而且如果您在無法測試的情況下優化自己,很可能會讓事情變得更糟。