swift 4 - 获取数组的内存大小

时间:2018-03-31 22:08:23

标签: arrays swift size

我需要找出刚刚下载的数组(Swift 4 AnyObject)的大小。每个移动设备都有一些可用内存(大小因用户而异),我需要一种方法来检查下载的大小。我搜索过,找不到合理的答案。希望你能帮忙!

1 个答案:

答案 0 :(得分:0)

目前这似乎是不可能的。但是,如果您只需要粗略估算,则可以使用class_getInstanceSize

func size<T: AnyObject>(_ array: [T]) -> Int {
    return class_getInstanceSize(T.self) * array.count
}

对于此示例数组

class Test {

    var a: Bool = false
    var b: Int = 0
    var c: String = ""

}

let array = [Test(), Test(), Test()]

您将获得168.请参阅this post以获取更多信息。

当然,这种方法不适用于可变长度的字段,例如字符串或数组。我看到获得准确值的唯一可能性是为每个可能的类编写一个函数来计算所需的确切字节数。例如,对于字符串,您可以使用

计算字节数
"test".data(using: .utf8)!.count

但即使采用这种方法,你也无法获得内存的实际大小,Swift使用内部来存储数组。

所以问题是:为什么你需要知道数组的大小?你不知道下载数据大小的原因是什么?如果从外部接收这些数据,它们必须已经以字节表示形式编码,因此计数应该非常简单。