iOS UIFont缓存?

14

我正在尝试确定是否应该缓存 [UIFont fontWithName:@"myfont" size:24]。我在许多地方重复使用此字体。我想知道 iOS 是否已经为我缓存了它,因为字体缓存在操作系统层面上非常普遍。

有人可以就此发表评论吗?

谢谢。

2个回答

22

我想知道iOS是否已经为我缓存了字体,因为在操作系统层面上,字体缓存非常普遍。

这就是iOS (我只测试过iOS 6.1)的做法。

我只是想实现自己的缓存。你知道,因为我是个聪明人,而且字体加载可能不是很快。

结果证明,苹果的人也很聪明。使用fontWithName:size:返回的对象对于相同的fontName和相同的size是相同的。这里有一个缓存机制。

为了确认这一点,在整个应用程序中放置了一些NSLog。

NSLog(@"GillSans 12 %p", [UIFont fontWithName:@"GillSans" size:12.0f]);

它们都显示相同的内存地址。

也适用于您自定义的字体。


20

上次我检查时,系统字体是被缓存的(也就是调用[UIFont systemFontOfSize:foo]两次会返回相同的对象)。我不确定缓存清除的频率是多少,但不缓存字体似乎很愚蠢,因为它们在Nib加载期间一直被实例化。

当然,如果你在同一个函数中对其进行了两次调用,将其缓存在局部变量中会略微更快(并且它会减小代码大小,因为Obj-C方法调用很大!)如果您在不同的地方偶尔这样做,可能不值得费力。

话虽如此,您可能希望通过类方法或“单例”上的方法访问字体(例如[MyAppBranding titleFont][[MyAppBranding currentBranding] titleFont])。这意味着您可以更轻松地更改使用的字体,让您在注意到它是性能瓶颈时添加额外的缓存层,并使支持多个品牌变得容易得多


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接