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

标签 arrays swift size

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

最佳答案

目前这似乎是不可能的。但是如果你只是需要一个粗略的估计,你可以使用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 内部用于存储数组的内存的实际大小。

那么问题来了:为什么需要知道数组的大小?您不知道下载数据大小的原因是什么?如果这些数据是从外部接收到的,则它们必须已经以字节表示形式进行编码,因此计数应该非常容易。

关于arrays - swift 4 - 获取数组的内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49592899/

相关文章:

ios - 为一个选项卡设置不同的 View Controller

css 更改大小会通过 move 其余的 div 来影响

php - 在 json 编码数组上使用 mysql 数组运算符?

ios - Swift:将标签与另一个控件放在一起

arrays - 我无法将csv加载到临时表HIVE

ios - GKTurnBasedEventListener 无法设置为我的 ViewController 的委托(delegate)?

c - C 结构填充是否使这种使用不安全?

linux - Mac 上 "size"命令中的数据段大小

javascript - 在带有 async、await 的数组映射函数中使用类的 `this` 对象 - Nodejs、Javascript

php - 处理大型数组时如何提高php的执行速度?