NSMutableArray *fontsDetails=[[NSMutableArray alloc] init];
[fontsDetails addObject:[UIFont systemFontOfSize:28]];
NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
@autoreleasepool {
for (NSString *fontName in fontNames) {
[fontsDetails addObject:[UIFont fontWithName:fontName size:28]];
}
}
}
我在控制器的viewDidLoad中使用此代码,使用此代码,第一次运行和第二次运行之间的堆快照差异增加了5mb,而且从未降低。 (随后的堆快照差异较小)。我在堆快照的回溯中发现[UIFont fontWithName:],我运行了泄漏探查器,没有泄漏。加载的所有字体都保留在堆中,永不销毁。请帮我解决这个问题。
最佳答案
很有可能,它是系统中的缓存,挂在UIFont上,期望可以再次使用它。
鉴于它一次又一次地增长,这并不是泄漏。
如果在“分配”工具中使用参考事件跟踪器,则可以看到保留字体的内容。我敢打赌,您会在UIFont机制中的某个位置发现一个或两个额外的保留。