一点背景:我正在编写一个包含滑块的应用程序,以更改整个应用程序中使用的字体大小。当用户滑动滑块时,用户会看到应用程序的字体实时变大和变小。我的很多用户界面都依靠NSString
的{{1}}来计算内在的内容大小和类似内容。
我最初开始在Objective-C中编写这个应用程序,现在我正在迁移到Swift。过了一会儿,我注意到我的字体滑块没有像以前那样执行。它过去很流畅,现在每个新的字体大小都显得口吃不清。
事实证明,性能下降是由sizeWithAttributes
引起的。结果表明Swift在Objective C中比在Objective C中慢得多。我在Swift和Objective C中执行了一次简单的测试(在iPhone 6上),执行sizeWithAttributes
100,000次。结果:
所以Swift的实施速度差了近40倍!!有人可以建议我在这做什么吗?我可以解决这个问题吗?
答案 0 :(得分:1)
事实证明,sizeWithAttributes
不是很慢,而是我输入字典的方式!
如果我运行此代码:
let size = string.sizeWithAttributes(attributes)
和attributes
输入为[String:AnyObject]
,它比attributes
类型为[NSObject:AnyObject]
慢很多倍!
从现在开始使用[NSObject:AnyObject]
作为属性的类型解决了问题!
修改:如果我将属性键入Dictionary
,它的速度甚至会快于[NSObject:AnyObject]