Я создаю gif-сплиттер, который возвращает последовательность изображений из данного gif-файла, он хорошо работает с маленькими гифками и все выглядит так, как нужно, но с большими файлами (больше 500 × 500 px), что вызывает проблемы с памятью.
Сообщение Xcode: Сообщение от отладчика: прекращено из-за проблемы с памятью «Соединение прервано» Ошибка связи
Больше, чем эта проблема Я не вижу утечек или нагрузки в анализаторе XCode, использование памяти составляет 50 - 110 МБ?!
Я пытался изменить gifOptions
, но ничего не изменилось.
import UIKit
import ImageIO
import MobileCoreServices
class CGifManager {
static let shared = CGifManager()
public func getSequence(gifNamed: String) -> [UIImage]? {
guard let bundleURL = Bundle.main .url(forResource: gifNamed, withExtension: "gif") else {
print("This image named \"\(gifNamed)\" does not exist!"); return nil
}
guard let imageData = try? Data(contentsOf: bundleURL) else {
print("Cannot turn image named \"\(gifNamed)\" into NSData") return nil
}
let gifOptions = [ kCGImageSourceShouldAllowFloat as String : true as NSNumber,
kCGImageSourceCreateThumbnailWithTransform as String : true as NSNumber,
kCGImageSourceCreateThumbnailFromImageAlways as String : true as NSNumber
] as CFDictionary
guard let imageSource = CGImageSourceCreateWithData(imageData as CFData, gifOptions) else {
debugPrint("Cannot create image source with data!"); return nil
}
let framesCount = CGImageSourceGetCount(imageSource)
var frameList = [UIImage]()
for index in 0 ..< framesCount {
if let cgImageRef = CGImageSourceCreateImageAtIndex(imageSource, index, nil) {
let uiImageRef = UIImage(cgImage: cgImageRef)
frameList.append(uiImageRef)
}
}
return frameList
}
}
Этот код тестировался с размерами 400 x 400 и 400 x 500 (30 кадров) в формате gif и работал также, но на самом деле мне нужно работать со всеми размерами, поэтому я понятия не имею, в чем проблема?
Любая помощь приемлема.