我需要找出我刚刚下载的一个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。有关更多信息,请参见此篇文章。
当然,这种方法对于变长字段(例如字符串或数组)不起作用。我所看到的唯一可能性是为每个可能的类编写一个函数以计算所需的确切字节数。例如,对于字符串,您可以使用以下公式计算字节数:
"test".data(using: .utf8)!.count
所以问题是:为什么需要知道数组的大小?而您不知道下载数据的大小的原因是什么?如果这些数据来自外部,它们必须已经编码为字节表示,所以计数应该很容易。