sizeWIthAttributes在Swift中速度惊人

时间:2014-11-30 12:17:37

标签: ios swift

一点背景:我正在编写一个包含滑块的应用程序,以更改整个应用程序中使用的字体大小。当用户滑动滑块时,用户会看到应用程序的字体实时变大和变小。我的很多用户界面都依靠NSString的{​​{1}}来计算内在的内容大小和类似内容。

我最初开始在Objective-C中编写这个应用程序,现在我正在迁移到Swift。过了一会儿,我注意到我的字体滑块没有像以前那样执行。它过去很流畅,现在每个新的字体大小都显得口吃不清。

事实证明,性能下降是由sizeWithAttributes引起的。结果表明Swift在Objective C中比在Objective C中慢得多。我在Swift和Objective C中执行了一次简单的测试(在iPhone 6上),执行sizeWithAttributes 100,000次。结果:

  • 目标C(NSString):0,35秒
  • Swift(String):13,6秒

所以Swift的实施速度差了近40倍!!有人可以建议我在这做什么吗?我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

事实证明,sizeWithAttributes不是很慢,而是我输入字典的方式!

如果我运行此代码:

let size = string.sizeWithAttributes(attributes)

attributes输入为[String:AnyObject],它比attributes类型为[NSObject:AnyObject]慢很多倍!

从现在开始使用[NSObject:AnyObject]作为属性的类型解决了问题!

修改:如果我将属性键入Dictionary,它的速度甚至会快于[NSObject:AnyObject]