NSFileManager 的 moveItemAtPath:toPath:error 方法是否加载正在移动到内存中的文件?

Does NSFileManager's moveItemAtPath:toPath:error method load the file being moved into memory?

我将每个用户的 .sqlite 数据库移动到我最新的应用程序更新中的不同目录。我当时使用的是 Core Data 方法 migratePersistentStore:toURL:options:withType:error,一些用户的应用程序因为使用过多的内存而关闭。所以我要恢复到 NSFileManager 的 moveItemAtPath:toPath:error 方法。我不认为这会像 migratePersistentStore:toURL:options:withType:error 那样将数据库加载到内存中,但我担心移动非常大的数据库仍然会出现相同的内存问题。我可以使用一些建议 - 有没有人确定文件在移动时是否加载到内存中?有没有办法以尊重设备内存的方式移动非常大的文件?有比 moveItemAtPath:toPath:error 更好的方法吗?

我同意你的看法,移动 NSFileManager 只会改变文件系统中的链接,不会将任何内容加载到内存中。但是,如果您真的想确定,请不要相信您在 Stack Overflow 上获得的答案,请在您的应用程序中亲自测试!当 运行 您的应用位于 Xcode 下时,单击 Debug Navigator,然后单击 Show Debug Gauges 工具,然后 内存。看起来很漂亮。

然后测试您的一个文件移动并验证没有内存峰值。