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

时间:2018-09-08 02:50:49

标签: ios sqlite memory core-data nsfilemanager

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

1 个答案:

答案 0 :(得分:2)

我同意您的观点,即使用NSFileManager进行移动仅应更改文件系统中的链接,而不会将任何内容加载到内存中。但是,如果您确实想确切地知道 ,请不要相信您在Stack Overflow上得到的答案,请在您的应用中自己进行测试!在Xcode下运行应用程序时,依次点击 Debug Navigator Show Debug Gauges 工具和 Memory 。看起来很漂亮。

enter image description here

然后测试文件中的一个是否移动,并确认没有内存高峰。