【发布时间】:2015-01-04 17:29:46
【问题描述】:
假设在 Swift 中我手动构造了一个 C 数组并传递它,如下所示:
override func drawRect(rect: CGRect) {
let c = UIGraphicsGetCurrentContext()
var arr = UnsafeMutablePointer<CGPoint>.alloc(4)
arr[0] = CGPoint(x:0,y:0)
arr[1] = CGPoint(x:50,y:50)
arr[2] = CGPoint(x:50,y:50)
arr[3] = CGPoint(x:0,y:100)
CGContextStrokeLineSegments(c, arr, 4)
}
(我知道我没有有这样做,但请耐心等待。)如果我不在这个 UnsafeMutablePointer 上调用 destroy 和/或 dealloc,我是吗?泄露四个 CGPoints 的内存?
【问题讨论】:
-
不能用 XCode 检查内存泄漏吗?
-
如果你不调用
arr.dealloc(4),你会泄漏内存。这似乎是一个很好的概述(可能是重复的?):stackoverflow.com/questions/27670643/… -
@doctordoder 你试过了吗?这里没有 CGPoint 对象——它只是某处的一块内存,所以我不能轻易地从所有内存块中挑选出来。
-
@MartinR 谢谢,我会重写以在问题中包含
dealloc;我并不是要限制我的义务可能是什么。但是,这个问题是我开始的地方(请注意我在回答后的评论/问题);它并没有明确告诉我我想知道什么。 -
这个 alloc/initialize/destroy/dealloc 东西的文档记录极差。也许您在开发者论坛上的帖子会给出一些结果。据我了解,destroy() 调用对象的 deinit 方法,这是 CGPoint 的无操作,因此您可以安全地省略它。 dealloc() 是 alloc() 的对应物(如在 malloc/free 中),所以没有它你会泄漏内存。