好的......所以我不知道为什么会这样,但是:
比较以下两行:
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代码发送一系列点数,直到我弄清楚如何解决这个问题,如果没有巨大的性能问题,我就无法做到。
答案 0 :(得分:0)
尝试:
func pointCurvy() {
autoreleasepool {
let pointCurve: [AnyObject] = self.curve.map{NSValue(point:$0)}
// Do something with pointCurve.
}
}