1

当我看到那个时我很惊讶

CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.attributedString);

当属性字符串包含表情符号时,导致我的应用程序无响应。

我提交了错误报告。同时我能做些什么作为快速修复?

4

1 回答 1

0

有时您需要“甜化”缓存。假设您使用的是 CGFontRef,让它呈现相同的表情符号字符。苹果通常会等到最后一刻才做一些代价高昂的事情。如果你知道你会需要它,如果你在早期强制工作,也许在一个线程中,然后当你需要这些字符时,它们将在某个地方呈现并缓存。

在我的应用程序中,在 applicationDidLaunch 中,我生成了一个执行类似操作的块。

编辑:在您的 applicationDidLaunch 中,获取 CTFontRef 到您稍后将用于渲染 Emoji 字符的字体。创建一大堆表情符号字符的属性字符串并将字体设置为您的 CTFontRef。采用:

CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)theAttributedString);

让它(希望)使字体缓存变甜。当您第一次执行此操作时,可能会导致一些延迟,如您之前所见。没关系 - 我们只是想从您看到延迟的地方消除延迟。如果这确实有效,那么您可以将上面的代码放在一个调度块中,然后从 applicationDidLaunch 将其发送到默认队列。

如果问题是您的初始视图绘制速度很慢,因为它显示 Emoji 字符,那么您就不走运了。如果延迟是以后这样的技术可以工作。我有一个类似的问题。

于 2012-09-02T22:15:33.520 回答