5

我有一个文件,我用 NSData 进行内存映射。然后我通过 NSFileManager 删除此文件而没有任何错误,并继续检查该文件是否确实不存在(就 NSFileManager 和 ls 而言)。但是,我仍然可以从之前从 NSData 获得的字节指针读取数据!

在模拟器中,我有时会遇到看似无关的崩溃。在设备上,一切似乎都运行良好。我很想知道发生了什么,以及我应该期待什么(我过去的预期是在尝试删除文件时出现错误,或者在删除文件后尝试访问它时崩溃)。

谢谢!

4

1 回答 1

6

如果您没有取消映射内存,那么您使用文件指针创建的 mmap 会阻止文件被删除(即使您看不到它)。在删除引用的文件之前,您应该始终取消映射内存。

[这与一个古老的 UNIX 技巧有关——打开一个文件,一旦你有一个文件描述符然后取消链接该文件——你有一个文件你可以用它做事但没有人能看到,如果你崩溃文件完全消失了!]

于 2012-08-07T18:16:28.157 回答