2
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:],我运行了泄漏分析器并且没有泄漏。所有加载的字体都保存在堆中,永远不会被销毁。请帮我解决这个问题。

4

1 回答 1

3

更有可能的是,它是系统中的一个缓存,它挂在 UIFont 上,期望它会被再次使用。

鉴于它只增长一次,并且永远不会再增长,它不是泄漏。

如果您在分配工具中使用参考事件跟踪器,您可以看到保留字体的内容。我敢打赌,你会在 UIFont 机器的某个地方找到一两个额外的保留。

于 2013-07-09T14:49:26.703 回答