假设我的 iOS 应用程序的数据目录中有一个文件夹,其中包含数千个小文件。删除此文件夹(通过[NSFileManager removeItemAtPath]
)需要相当长的时间。但在 OS X 上,删除具有相同内容的文件夹非常快。它似乎只是从文件系统中取消文件夹的链接。那么为什么 iOS 需要这么长时间呢?有什么不同?
编辑:在 iPad 3 上,删除 3 个文件夹(每个文件夹包含 5,000 到 9,000 个文件)大约需要 35 秒。在旧版 Retina MBP 上运行的模拟器上,大约需要 1.5 秒。
您看到的层次结构不是“真实的”——目录
不是它们看起来包含的文件的物理容器。
目录层次结构是精心维护的虚构作品。
撇开无关紧要不谈:最初的 Mac 文件系统迈出了这一步
更进一步——它使目录结构完全成为视觉小说
-- 所有文件都位于(3.5 英寸)软盘的根目录中,并且仅seemed排列在文件夹中。幸好这是
被 HFS 取代。
最好将目录/文件夹视为一种特殊类型的文件
包含要访问的一组文件的索引pretend包含装有。
从概念上讲,这与经典的 Cocoa 内存管理非常相似。
每个(目录/对象)通过引用“拥有”一组(文件/对象)
(“保留”(文件/对象))。
当您从目录中删除文件时,该文件就被“释放”。如果没有其他
目录对该文件有所有权声明,它被“释放”。
您的(文件夹/对象)不包含它“拥有”的对象。它
甚至并不真正“拥有”它们——它只是对它们有“所有权主张”
他们。
来自维基百科有关硬链接的文章:
“硬链接是一个目录条目,它将名称与文件系统上的文件关联起来。目录本身就是一种特殊的文件,
包含此类条目的列表。”
请注意,由于使用了硬链接,因此可能有一个
可以出现在多个目录中的物理文件。每一项
这些目录拥有对“真实”文件的引用。每个参考
和其他任何东西一样“真实”。所有引用都必须“取消链接”
要标记为已删除的文件。
“文件”甚至可以在不同的地方有不同的“名称”
目录!
硬链接是文件系统功能的链锯——功能强大,但是
可能相当危险。请注意,OSX GUI 没有提供任何方法
生成硬链接,甚至符号链接。
From 此电子邮件列表项 http://lists.apple.com/archives/cocoa-dev/2010/Oct/msg00087.html.
现在介绍一下 iOS
[NSFileManager removeItemAtPath: error:],它在
引擎盖是他们迭代子目录和文件并删除
他们先。这需要一些时间。我有兴趣是否可以
立即执行此操作,甚至不需要隐式递归。只需删除
目录和文件和子目录会消失吗?
你能做的是
如果您担心这会花费时间并且需要即时结果,您可以重命名该文件夹(几乎是即时的),然后在后台线程中删除重命名的文件夹及其内容。
如果时间有限,请尝试在后台线程中运行删除进程(如果不是问题)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)