在OS X上有效地将大型NSAttributedString绘制到NSView中?

时间:2014-08-19 17:43:53

标签: objective-c performance cocoa nsview appkit

我将终端仿真器从Linux移植到OS X.

在Linux版本中,代码始终具有可以随时绘制的视图句柄。所有这些绘图都是"缓存",所以当你画一次东西时,它总会在那里,直到你画了它,即它使用基于推的绘图模型。在OS X版本中,NSView使用基于拉取的模型,因此您在要求绘制时绘制,无论它多次请求您。

在我的绘图方法中,我从内部终端表示创建NSAttributedString,然后使用CoreText的框架集函数将其绘制到-drawRect:内的当前上下文中。

这样做效率很低有两个原因:一个是因为对此属性字符串的更改不会像-drawRect那样频繁发生,另外一个因为我必须在每个调用时建立一个CTFramesetter并且绘制它,在我描述它时已被证明是缓慢的。

或者,我尝试根据CGLayer中的当前CGContext创建-drawRect:,但这取决于分辨率;因此,如果您将窗口从一个屏幕移动到另一个具有不同分辨率的屏幕(即视网膜显示屏),则可能无法正确绘制。

有哪些替代技术可以有效地将终端中的属性字符串类型绘制为NSView

0 个答案:

没有答案