我正在尝试确定是否应该缓存 [UIFont fontWithName:@"myfont" size:24]。我在许多地方重复使用此字体。我想知道 iOS 是否已经为我缓存了它,因为字体缓存在操作系统层面上非常普遍。
有人可以就此发表评论吗?
谢谢。
我想知道iOS是否已经为我缓存了字体,因为在操作系统层面上,字体缓存非常普遍。
这就是iOS (我只测试过iOS 6.1)的做法。
我只是想实现自己的缓存。你知道,因为我是个聪明人,而且字体加载可能不是很快。
结果证明,苹果的人也很聪明。使用fontWithName:size:
返回的对象对于相同的fontName和相同的size是相同的。这里有一个缓存机制。
为了确认这一点,在整个应用程序中放置了一些NSLog。
NSLog(@"GillSans 12 %p", [UIFont fontWithName:@"GillSans" size:12.0f]);
它们都显示相同的内存地址。
也适用于您自定义的字体。
上次我检查时,系统字体是被缓存的(也就是调用[UIFont systemFontOfSize:foo]
两次会返回相同的对象)。我不确定缓存清除的频率是多少,但不缓存字体似乎很愚蠢,因为它们在Nib加载期间一直被实例化。
当然,如果你在同一个函数中对其进行了两次调用,将其缓存在局部变量中会略微更快(并且它会减小代码大小,因为Obj-C方法调用很大!)如果您在不同的地方偶尔这样做,可能不值得费力。
话虽如此,您可能希望通过类方法或“单例”上的方法访问字体(例如[MyAppBranding titleFont]
或[[MyAppBranding currentBranding] titleFont]
)。这意味着您可以更轻松地更改使用的字体,让您在注意到它是性能瓶颈时添加额外的缓存层,并使支持多个品牌变得容易得多。