swift - 为什么 `Data(count:)` 在 Swift 中不分配内存?
问题描述
我试图了解内存分配和释放在 Swift 中是如何工作的。我写了这个简单的循环:
func overloadMemory() {
var data: [Data] = []
for _ in 0..<100 {
let datum = Data(count: 10_000_000)
data.append(datum)
print("data: \(data.count)")
}
}
我希望这会分配 10MB * 100 = 1GB 的内存。但是当我监控内存使用情况时,循环运行但它根本没有显示内存的任何变化。还有另一种方法可以在 Swift 中分配固定数量的内存吗?还是我误解了什么Data
?
解决方案
您如何测量内存使用情况?使用 Instruments,我们可以看到正在分配内存。
代码有个小问题:data
方法一结束,变量就会超出范围,会被释放。
为了测试它,我做了一个带有执行分配按钮的小应用程序,如下所示:
class ViewController: UIViewController {
var data: [Data] = []
@IBAction func overloadMemory() {
for _ in 0..<100 {
let datum = Data(count: 10_000_000)
data.append(datum)
print("data: \(data.count)")
}
}
}
在截图中,我点击了两次按钮,你可以看到分配的增加
推荐阅读
- c# - 使用右键单击而不是左键单击作为统一按钮
- elasticsearch - 如何从祖父母那里获得elasticsearch 7.10中的所有孙子
- css - Webpack sass-loader 生成错误/损坏的源映射
- python - 导出已编译的 .dll 或 .so 文件以用于其他语言时,“初始化 Julia 运行时”是什么意思?
- blender - 这个 Blender 节点设置有什么问题?
- c# - C#如何用IQueryable定义一个匿名类型?
- javascript - 我只想使用 Sequelize 创建一个新关联(非常简单的问题)
- c++ - 打开 parquet 目录 [arrowcpp]
- c# - 从 Post Call 获取响应标头数据
- php - nginx 404 用于资产