我想创建一个包装所有资源的框架。特别是,我需要加载一些自定义字体。
有两种方法:
我使用以下代码加载从bundle中读取的字体数据:
+ (void)loadFontData:(NSData*)inData {
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
CFStringRef errorDescription = CFErrorCopyDescription(error);
NSLog(@"Failed to load font: %@", errorDescription);
CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
}
并运行
中的代码- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
但是,我发现应用程序启动时内存使用量显着增加,有时我会收到内存警告。
这种方式是添加客户字体的常用方法。但是,如果使用这种方式,我必须公开我的框架细节。例如,我必须添加以下值:
此方法不会导致内存峰值。但我想隐藏使用我的框架的人的字体文件。
有人可以帮忙吗?如何以编程方式加载自定义字体而不会导致内存使用爆炸?
答案 0 :(得分:0)
这样做可以避免增加进程的内存使用量。
bool CTFontManagerRegisterFontsForURL(CFURLRef fontURL, CTFontManagerScope scope, CFErrorRef _Nullable *error);
Apple文档说:
文件支持的字体应使用CTFontManagerRegisterFontsForURL注册。