Swift 4 CGContext утечка памяти - PullRequest
0 голосов
/ 02 июля 2018

У меня есть этот код для преобразования UIImage в [UInt8] (в пикселях)

extension UIImage {
func pixelData() -> [UInt8]? {
    let size = self.size
    let dataSize = size.width * size.height * 4
    var pixelData = [UInt8](repeating: 0, count: Int(dataSize))
    let colorSpace = CGColorSpaceCreateDeviceRGB()
    var context = CGContext(data: &pixelData,
                            width: Int(size.width),
                            height: Int(size.height),
                            bitsPerComponent: 8,
                            bytesPerRow: 4 * Int(size.width),
                            space: colorSpace,
                            bitmapInfo: CGImageAlphaInfo.noneSkipLast.rawValue)
    guard let cgImage = self.cgImage else { return nil }
    context?.draw(cgImage, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))

    return pixelData
}
}

Эта функция вызывается много раз, и в процессе отладки я заметил, что при вызове отрисовки выделяется + 1 МБ (размер изображения), который не освобождается после завершения функции.

В информации об отладке памяти это ответственные абоненты для большей части памяти:

Responsible Library: CoreGraphics

Responsible Caller: CGDataProviderCreateWithCopyOfData

Может кто-нибудь помочь исправить эту утечку памяти, пожалуйста?

...