首页 > 解决方案 > 为什么 `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

标签: swiftxcode

解决方案


您如何测量内存使用情况?使用 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)")
      }
    }
}

在截图中,我点击了两次按钮,你可以看到分配的增加


推荐阅读