gpt4 book ai didi

ios - String.replacingOccurrences 出现大字符串内存问题

转载 作者:行者123 更新时间:2023-11-28 15:10:42 57 4
gpt4 key购买 nike

在我们的应用程序中,我们生成一个 PDF 文件。所以我们使用一个 HTML 文件作为模板并将这个模板加载到 String 然后用正确的值替换所有的 placeholders:

let template = Bundle.main.path(forResource: “reportTemplate”, ofType: "html")
do {
var htmlTemplate = try String(contentsOfFile: template!)
htmlTemplate = htmlTemplate.replacingOccurrences(of: “#LOGO#”, with: logoBase64)
htmlTemplate = htmlTemplate.replacingOccurrences(of: “#TITLE#”, with: “PDF FILE“)
htmlTemplate = htmlTemplate.replacingOccurrences(of: “#IMAGE1#”, with: reportImageBase64)
htmlTemplate = htmlTemplate.replacingOccurrences(of: “#IMAGE2#”, with: reportImageBase64)
//…
} catch {
print(“\(error)“)
}

PDF 可能包含大量图像,因此当我们将这些图像转换为 Base64 时,字符串会变大。

然后我们注意到这会导致内存问题,因为当我们运行生成代码时内存会变高。由于指向此的 NSMallocException,我们收到了随机崩溃报告。

有什么建议可以避免这种情况吗?

最佳答案

尝试改变您的 String 就地,因为这可能会大大减少您的内存使用量。例如:

let token = htmlTemplate.range(of: “#LOGO#”)!
htmlTemplate.replaceSubrange(token, with: logoBase64)
...

如果一个标记可能出现不止一次——或者根本不出现! — 你也需要考虑到这一点:

while let token = htmlTemplate.range(of: “#LOGO#”) {
htmlTemplate.replaceSubrange(token, with: logoBase64)
}
...

关于ios - String.replacingOccurrences 出现大字符串内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47686298/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com