Не удается найти 64-байтную утечку памяти при применении фильтра в NSImage - PullRequest
0 голосов
/ 15 апреля 2019

Среда:

  • Xcode 10.2
  • Swift 4.2
  • MacOS Цель: 10.11

У меня есть следующее расширение NSImage:

extension NSImage {

    func filter(filter: String) -> NSImage? {
        return autoreleasepool { [weak self] () -> NSImage? in
            let image = CIImage(data: (self?.tiffRepresentation!)!)

            if let filter = CIFilter(name: filter) {
                filter.setDefaults()
                filter.setValue(image, forKey: kCIInputImageKey)

                let context = CIContext(options: [CIContextOption.useSoftwareRenderer: true])
                // *** 64 Byte MEMORY LEAK on line below ***
                guard let imageRef = context.createCGImage(filter.outputImage!, from: image!.extent) else {
                    context.clearCaches()
                    context.reclaimResources()
                    return nil
                }
                context.clearCaches()
                context.reclaimResources()
                return NSImage(cgImage: imageRef, size: NSSize(width: 0, height: 0))
            } else {
                return nil
            }
        }
    }

}

Инвертируемое изображение задается в InterfaceBuilder и представляет собой 16KB 480x480 png с альфа-каналом и цветовым профилем sRGB IEC61966-2.1.Я вызываю функцию «фильтра» из подкласса NSButton следующим образом:

...

override func awakeFromNib() {
    ....
    autoreleasepool {
        image = image!.filter(filter: "CIColorInvert")
    }
    ....
}
...

Фильтр работает так, как объявлено.Тем не менее, я получаю 64-байтовую утечку памяти при защищенном вызове ' context.createCGImage '.

Вещи, которые я пробовал:

  • Перемещение блока автозапуска вверх и вниз по функции фильтра
  • Удаление блока автозапуска из подкласса NSButton
  • Удаление одного и обоих блоков автозапуска

Аналогичные результаты: утечка памяти в 64-байтовом Malloc в строке, указанной выше.Чего мне не хватает?

...