關於dataWithContentsOfFile 讀取大檔案的記憶體問題

weixin_33912445發表於2018-06-01

在《中國區GPS偏移糾正(適用於Google地圖)》一文中曾讀取一個78M的大資料檔案,一開始採用了NSData的dataWithContentsOfFile:方法。不少人反饋說如果直接使用,將會耗盡iOS的記憶體。

其實這個是可以改善的。

NSData還有一個API:

+ (id)dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr; 其中NSDataReadingOptions可以附加一個引數,NSDataReadingMappedIfSafe引數。使用這個引數後,iOS就不會把整個檔案全部讀取的記憶體了,而是將檔案對映到程式的地址空間中,這麼做並不會佔用實際記憶體,這樣就可以解決記憶體滿的問題。

相關文章