Я пытаюсь получить расчет гистограммы. Все работает отлично, за исключением того, что следующий метод показывает огромную утечку памяти при профилировании в Инструментах.vImageBuffer_InitWithCGImage Утечка памяти в Swift 3
Каждый раз, когда следующий метод вызывается, он использует 200-300 Мб оперативной памяти и никогда не выпускает:
func histogramCalculation(_ imageRef: CGImage) -> (red: [UInt], green: [UInt], blue: [UInt]) {
var inBuffer = vImage_Buffer()
vImageBuffer_InitWithCGImage(
&inBuffer,
&format,
nil,
imageRef,
UInt32(kvImageNoFlags))
let alpha = [UInt](repeating: 0, count: 256)
let red = [UInt](repeating: 0, count: 256)
let green = [UInt](repeating: 0, count: 256)
let blue = [UInt](repeating: 0, count: 256)
let alphaPtr = UnsafeMutablePointer<vImagePixelCount>(mutating: alpha) as UnsafeMutablePointer<vImagePixelCount>?
let redPtr = UnsafeMutablePointer<vImagePixelCount>(mutating: red) as UnsafeMutablePointer<vImagePixelCount>?
let greenPtr = UnsafeMutablePointer<vImagePixelCount>(mutating: green) as UnsafeMutablePointer<vImagePixelCount>?
let bluePtr = UnsafeMutablePointer<vImagePixelCount>(mutating: blue) as UnsafeMutablePointer<vImagePixelCount>?
let rgba = [redPtr, greenPtr, bluePtr, alphaPtr]
let histogram = UnsafeMutablePointer<UnsafeMutablePointer<vImagePixelCount>?>(mutating: rgba)
let error : vImage_Error = vImageHistogramCalculation_ARGB8888(&inBuffer, histogram, UInt32(kvImageNoFlags))
if (error == kvImageNoError) {
return (red, green, blue)
}
return (red, green, blue)
}
Что может быть неправильно здесь .....
БОЛЬШОЙ ответ! Работает! – Gizmodo
Я считаю, что бесплатный (inBuffer.data) также сработал бы? – Gizmodo
hahaha yeah ... Я забыл, что 'free' будет импортироваться через' Darwin' (тратил так много времени на сырой Swift). Наверное, даже лучше назвать то, что они говорят, чтобы позвонить ... –