我最近发现这篇文章似乎描述了我添加自己的ttf时遇到的同样问题。我的应用冻结了。然而,关于帖子的一些事情让我感到困惑,我很乐意帮助解读它。
帖子在这里:http://web.archiveorange.com/archive/v/nagQXB5eX3YsQpevIXMk
我想了解的相关段落如下:
附加调试器并暂停 该申请揭示了一个没有 特别有用的调用堆栈:
__spin_lock 中的0 0xffff028f
1 ??
导致该问题的特定代码 问题:
CTFontCollectionRef collection = CTFontCollectionCreateFromAvailableFonts(NULL); CFArrayRef fonts = CTFontCollectionCreateMatchingFontDescriptors(集合); for(id fontDescRef in(NSArray *)fonts){CFStringRef fontName = CTFontDescriptorCopyAttribute((CTFontDescriptorRef)fontDescRef, kCTFontNameAttribute);的NSLog(@ “%@”, 的fontName); CFRelease(的fontName); }
CFRelease(字体);执行永远不会超越 第二行。
问题:他是如何找出造成问题的线路和功能的?这是否与显示反汇编,以混合模式显示或在地图文件中查找十六进制值有关?我想了解这是如何完成的。
被要求提供演示和 因此进一步调查, 我发现问题就出现了 如果代码在我的 应用中:didFinishLaunchingWithOptions: 但如果我有相同的东西,请不要 我的初始视图的viewDidLoad 控制器。
问题:他在这里指的是什么'代码'?问题与通过plist值添加自定义字体有关,所以我不确定他可能指的是什么或我如何解决我的问题。
请帮助!
答案 0 :(得分:0)
好吧,没有关于弄清楚这篇文章的内容,但我确实在apple dev论坛上找到了一个人发布的解决方法。基本上,从applicationDidFinishLaunching fn:
中调用它- (NSUInteger) loadFonts {
NSUInteger newFontCount = 0;
NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
if (frameworkPath) {
void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
if (graphicsServices) {
BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
if (GSFontAddFromFile)
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
}
}
return newFontCount;
}
并确保包含dlcfn.h并将dlsym的结果转换为以下内容:
(BOOL()(const char ))
我没有改变原帖,以防这个错误只是影响我的事情。