如何检查Swift中是否可以分配?

时间:2018-08-17 08:30:18

标签: ios arrays swift memory-management allocation

我需要创建两个大型的UInt8阵列以进行快速计算。 数组是这样创建的(两者都具有相同的大小):

let number = 1000 * 800 * 500
var data = Array(repeating: UInt8(0), count: number)

每次运行的常量“数字”都不相同,但是我提供了一些示例,说明它通常有多大。 有时,由于没有足够的内存,应用程序崩溃。

有没有一种方法可以检查是否有足够的内存来预先创建阵列?我已经尝试过使用像这样的'3d'数组:

var data = Array(repeating: Array(repeating: Array(repeating: UInt8(0), count: 1000), count: 800), count: 500)

这从来没有导致崩溃,因为系统不需要分配一个大的连续内存空间。但是,此多维数组的性能要差得多。因此,这不是一个选择。

我尝试的另一个解决方案是使用:

data.reserveCapacity(number)

在创建之前,但这也不能防止应用崩溃。 因此,我很高兴听到一些建议,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

通常,我们不会在设备上执行如此大量的计算和存储。 但是,如果需要这样做,就不能连续保存如此大量的数据。

使用链接列表保存数据。由于链接列表会不连续地保存数据,因此只要设备上有可用内存,就可以保存数据。

检查设备的存储空间,请参阅Apple文档。链接-> Apple Doc