我需要找出我刚刚下载的数组 (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/