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でこのコードを使用しています。このコードでは、1回目と2回目の実行のヒープショットの差が5mb増加し、決して下がらない. (その後のヒープ ショットの差は小さくなります)。ヒープ ショットのバックトレースで [UIFont fontWithName:] を見つけました。リーク プロファイラーを実行しましたが、リークはありません。ロードされたすべてのフォントはヒープに保持され、破棄されることはありません。これを解決するのを手伝ってください。

4

1 に答える 1

3

おそらく、再び使用されることを期待して UIFont にぶら下がっているのは、システム内のキャッシュです。

1 度成長すると、2 度と成長しないため、リークではありません。

Allocations インストゥルメントで参照イベント トラッカーを使用すると、何がフォントを保持しているかを確認できます。UIFont 機構のどこかに 1 つまたは 2 つの余分な保持が見つかると思います。

于 2013-07-09T14:49:26.703 に答える