iOS Swift 5、自动释放CoreText & CoreGraphics内存
iOS Swift 5, Auto Release CoreText & CoreGraphics memory
我正在使用 CoreText 和 CoreGraphics 从目录中的文件加载字体,然后使用以下代码在 for 循环中根据字体元数据中支持的 unicode 字符对它们进行分类:
if let provider = CGDataProvider(url: fontFileURL as CFURL) {
if let font = CGFont(provider) {
let ctFont = CTFontCreateWithGraphicsFont(font, 12, nil, nil)
let chSet = CTFontCopyCharacterSet(ctFont)
let cSet = chSet as CharacterSet
let isAr = cSet.contains(Unicode.Scalar.init(unicodeScalarLiteral: "ب"))
let isEn = cSet.contains(Unicode.Scalar.init(unicodeScalarLiteral: "b"))
print(++index, isAr, isEn)
}
}
但是在 fore 循环完成循环文件之前的某个时间点,应用程序崩溃并显示错误消息 Terminated due to memory issue
,所以我怀疑这四个函数中的任何一个都泄漏了内存,或者至少我没有正确处理内存:
CGDataProvider: constructor
CGFont: constructor
CTFontCreateWithGraphicsFont: func to convert CGFont to CTFont
CTFontCopyCharacterSet: get a copy of CharacterSet supported by the CTFont
我尝试用 autoreleasepool
包装代码,但没有帮助。
请问有没有办法在继续循环到下一个字体文件之前释放任何分配的内存!!!
将这段代码从 for 循环中提取到另一个函数中,可以释放与加载的 CGFont 和复制的 CharacterSet 相关联的内存。
我正在使用 CoreText 和 CoreGraphics 从目录中的文件加载字体,然后使用以下代码在 for 循环中根据字体元数据中支持的 unicode 字符对它们进行分类:
if let provider = CGDataProvider(url: fontFileURL as CFURL) {
if let font = CGFont(provider) {
let ctFont = CTFontCreateWithGraphicsFont(font, 12, nil, nil)
let chSet = CTFontCopyCharacterSet(ctFont)
let cSet = chSet as CharacterSet
let isAr = cSet.contains(Unicode.Scalar.init(unicodeScalarLiteral: "ب"))
let isEn = cSet.contains(Unicode.Scalar.init(unicodeScalarLiteral: "b"))
print(++index, isAr, isEn)
}
}
但是在 fore 循环完成循环文件之前的某个时间点,应用程序崩溃并显示错误消息 Terminated due to memory issue
,所以我怀疑这四个函数中的任何一个都泄漏了内存,或者至少我没有正确处理内存:
CGDataProvider: constructor
CGFont: constructor
CTFontCreateWithGraphicsFont: func to convert CGFont to CTFont
CTFontCopyCharacterSet: get a copy of CharacterSet supported by the CTFont
我尝试用 autoreleasepool
包装代码,但没有帮助。
请问有没有办法在继续循环到下一个字体文件之前释放任何分配的内存!!!
将这段代码从 for 循环中提取到另一个函数中,可以释放与加载的 CGFont 和复制的 CharacterSet 相关联的内存。