【发布时间】:2018-09-10 14:03:13
【问题描述】:
我需要找出我刚刚下载的数组 (Swift 4 AnyObject) 的大小。每个移动设备都有一些可用内存(每个用户的大小不同),我需要一种方法来检查我的下载大小。我已经搜索并找不到合理的答案。希望你能帮忙!
【问题讨论】:
我需要找出我刚刚下载的数组 (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 使用 内部 来存储数组的内存的实际大小。
所以问题是:为什么需要知道数组的大小?您不知道下载数据大小的原因是什么?如果这些数据是从外部接收的,它们必须已经以字节表示形式编码,因此计数应该很容易。
【讨论】: