许多文件会影响应用程序的性能吗?

时间:2018-10-10 05:34:42

标签: ios

我正在创建一个iOS应用,它将包含大量文件,我的意思是数千个。

大小虽小,但太多了。

我很困惑,这是更好的选择,将它们直接捆绑在应用程序内,或者将它们压缩到一个文件中,并在应用程序首次运行时将其解压缩到文档中。

谢谢。

1 个答案:

答案 0 :(得分:2)

(尚不清楚您的设置是什么,或您担心的问题是什么(正如@rmaddy在评论中指出的那样。但这是我在一个应用程序中捆绑太多文件的两分钱,对于它的价值:)

在iOS 4的早期,我在尝试在iOS应用中捆绑约400个PNG时遇到了问题。在运行时,某些文件不可用,应用程序运行缓慢。

当您将资源文件作为“组” (即黄色文件夹图标)添加到Xcode项目中时,它们都会被复制到应用程序包的根目录中,无论这些组在Xcode的“项目浏览器”窗格中可能具有哪种文件夹子结构。 它们可以在运行时访问,如下所示:

let filePath = Bundle.main.path(forResource: "MyFile", ofType: "png")

问题

问题似乎是,至少在那时,如果一个目录的顶层文件过多,iOS会为之轻笑。因为当使用“组”选项(黄色文件夹图标)时,不管一切都以根结尾,所以没有出路。


解决方案

如果改为使用“作为文件夹引用” 选项(蓝色文件夹图标),则Mac中具有的任何目录结构都将保留在内置的应用程序包中。这样,您可以将文件拆分为每个子目录,每个子目录包含(例如)不超过50个文件,并且已设置好。

唯一的问题是,读取路径时需要使用以下方式指定子目录:

let filePath = Bundle.main.path(forResource: "MyFile", ofType: "png", inDirectory: "Images/01-50/")

此外,如果您的文件是图像(例如我的情况),则不能再使用:

let image = UIImage(named: "MyFile")

您需要使用:

let filePath = Bundle.main.path(forResource: "MyFile", ofType: "png", inDirectory: "Images/01-50/")
let image = UIImage(contentsOfFile: filePath)

(我不确定在此方面进行编译的资产目录在此方面的公平性,因为自引入以来我还没有遇到过这种情况,但是资产目录确实提供了将资产组织到子文件夹中的选项...)


附录:正如他们所说的那样,过早的优化效果不好,因此,最终,您至少应该尝试,将捆绑销售商品文件一次,然后对其进行测试/配置。

不必要的复杂性是更多的代码行,因此有更多的潜在错误,它最终可能会回来并咬住您。