Swift中奇怪的内存行为

时间:2014-12-21 06:50:06

标签: swift memory-management

好的......所以我不知道为什么会这样,但是:

比较以下两行:

let pointCurve: [AnyObject] = self.curve.map{NSValue(point:$0)}

let pointCurve: [NSPoint] = self.curve.map{$0}

在任何一种情况下,变量都是本地变量,在赋值后根本不使用。该行驻留在一个重复且非常快速调用的方法中。第一种情况导致内存使用的可怕和快速增长。但是当我把它改成第二个时,记忆统计数据就像光盘一样平坦。

你可能会说,“哦,你在第二行没有做任何事情”。所以我尝试了以下内容:

var pointCurve: [AnyObject] = []
for c in self.curve {
    pointCurve.append(NSValue(point:NSPoint(x:1, y:1))
}

vs

var pointCurve: [NSPoint] = []
for c in self.curve {
    pointCurve.append(NSPoint(x: 1, y: 1))
}

现在我看到完全相同的结果。罪魁祸首似乎是NSValue。我和Instruments一起检查了一大堆NSConcreteValues被分配,我在网上看到这些与NSValue有关。但我没有发现任何导致内存泄漏的事情。

问题是我该怎么做才能做到这一点。我应该向一些ObjC代码发送一系列点数,直到我弄清楚如何解决这个问题,如果没有巨大的性能问题,我就无法做到。

1 个答案:

答案 0 :(得分:0)

尝试:

func pointCurvy() {
    autoreleasepool {
        let pointCurve: [AnyObject] = self.curve.map{NSValue(point:$0)}            
        // Do something with pointCurve.
    }
}