小编lea*_*lin的帖子

在AppKit中测量文本宽度的性能

在AppKit中有没有办法快速测量大量NSString对象(比如一百万)的宽度?我尝试了3种不同的方法:

  • [NSString sizeWithAttributes:]
  • [NSAttributedString size]
  • NSLayoutManager(获取文本宽度而不是高度)

    以下是一些性能指标

    Count\Mechanism    sizeWithAttributes    NSAttributedString    NSLayoutManager
    1000               0.057                 0.031                 0.007
    10000              0.329                 0.325                 0.064
    100000             3.06                  3.14                  0.689
    1000000            29.5                  31.3                  7.06



    NSLayoutManager显然是要走的路,但问题在于

  • 由于创建了重量级的NSTextStorage对象,因此内存占用空间很大(根据分析器而超过1GB).
  • 创作时间长.所有花费的时间都是在创建上述字符串的过程中,这本身就是一个交易破坏者.(随后测量NSTextStorage对象,其中创建和布置的字形只需要大约0.0002秒).
  • 对于我想要做的事情,7秒仍然太慢.有更快的方法吗?在大约一秒钟内测量一百万个字符串?

    如果你想玩,是github项目.

  • cocoa objective-c nslayoutmanager nsattributedstring nstextstorage

    10
    推荐指数
    1
    解决办法
    763
    查看次数