我在运行时加载 ttf 字体并使用 CoreText 注册它们。后来,当字体更新时,我从 CoreText 取消注册字体,从服务器下载最新版本并再次向 CoreText 注册字体。
这几乎可以工作,但似乎字体已被缓存并且在我的应用程序终止并重新启动之前不会更新。
注销字体并将其从任何缓存中删除的正确方法是什么?
我使用此代码注销字体:
NSURL *url = /* My url to the font */;
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef) url);
CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
CGDataProviderRelease(fontDataProvider);
CFErrorRef error = nil;
CTFontManagerUnregisterGraphicsFont(newFont, &error);
CGFontRelease(newFont);
if (error) {
NSLog(@"Error unregistering font: %@", error);
}
return newFontName;
我觉得有问题但不知道如何解决的一件事是我如何获得CGFontRef
. 是否CGFontCreateWithDataProvider
每次都创建新的引用,或者我是否会获得对已注册的引用(CGFontRef
如果存在)?有没有更好的方法来获取CGFontRef
已经注册的字体?
我只使用字体来创建动态UIImage
实例,所以我认为没有任何标签或其他 UI 元素保留对字体的引用。
谢谢你的帮助!