IOS:取消注册CoreText注册的字体

Joh*_*erg 8 objective-c core-text ios

我在运行时加载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;
Run Code Online (Sandbox Code Playgroud)

我觉得有一件事是错的,但不知道如何解决,我是如何得到的CGFontRef.是否CGFontCreateWithDataProvider每次都创建新的引用,或者CGFontRef如果它已存在,我是否已获得已注册的引用?有没有更好的方法来获得CGFontRef已经注册的字体?

我只使用字体来创建动态UIImage实例,所以我认为没有任何标签或其他UI元素保持对字体的引用.

谢谢你的帮助!

Dri*_*ico 0

经过一番尝试,我认为这是 iOS 7 的一个错误。
您尝试过在 iOS 6 中运行它吗?