我正在創建一個包含潛在數百個大文件的NSDocument
程序包,因此我不想在打開文檔時將它全部讀入。NSFileWrapper是否支持延遲加載?
我花了一些時間搜索,但我找不到答案。大多數人似乎認爲NSFileWrapper
會將所有數據加載到內存中,但有些人表示在包裝器上調用-regularFileContents
之前它不會加載數據。 (參見例子Does NSFileWrapper load everything into memory?和Objective-C/Cocoa: Uploading Images, Working Memory, And Storage。)
的文檔並不完全清楚,但像NSFileWrapperReadingImmediate
和NSFileWrapperReadingWithoutMapping
選項似乎表明,它並不總是閱讀一切。
我推測,NSFileWrapper
支持增量保存,只寫出已被替換的子包裝。所以如果它也支持增量加載,那將會很好。
是否有確定的答案?
謝謝,非常有幫助。我正確地認爲,如果我指定了'NSFileWrapperReadingWithoutMapping',那麼'-regularFileContents'將在文件中讀取而不緩存它?我希望能夠閱讀一堆plists而不讓他們留在記憶中。更好的辦法是讓它緩存它們,並有辦法在不再需要時卸載/丟棄它們,但我沒有看到任何方法。 – Dejal 2013-04-09 17:34:44
不,'NSFileWrapperReadingWithoutMapping'控制是否使用內存映射。無論哪種方式,覆蓋文件的'NSData'對象將被保存到 – 2013-04-09 23:32:31
「卸載」文件包裝器而不釋放它的唯一方法是讓它再次從URL讀取。可以說這是一種有意的設計,因此在正常情況下,「NSFileWrapper」具有半不可變的性質;一旦加載,其屬性不會回覆到較早/未知狀態 – 2013-04-09 23:35:02