0

Analyzexcodeから実行するとリーク警告が表示され、警告は下の図のようになります

ここに画像の説明を入力

ただし、Instrumentチェックに使用している場合、「リーク」の警告はまったく表示されません。画像を以下に示します ここに画像の説明を入力

質問 : 漏れますか?

Common.m

void drawLinearGradient(CGContextRef context, CGRect rect, CGColorRef startColor, CGColorRef  endColor) {
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGFloat locations[] = { 0.0, 1.0 };

    NSArray *colors = [NSArray arrayWithObjects:(__bridge id)startColor, (__bridge id)endColor, nil];

    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);

    CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
    CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

    CGContextSaveGState(context);
    CGContextAddRect(context, rect);
    CGContextClip(context);
    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
    CGContextRestoreGState(context);
    CGGradientRelease(gradient);
    //CGColorSpaceRelease(colorSpace);--------> this will fix leaking

}
4

1 に答える 1

2
  • その小さな三角形を展開すると、Xcode はリークにつながる実行パスを表示します

  • はい、そのコードは色空間を漏らしています

  • その割り当てグラフは確かにリークのように見えますが、多くの色空間を作成しない限り、色空間にとってはかなり急勾配です!

  • ヒープショット分析が役立つ可能性があります。

于 2013-04-04T18:12:47.860 に答える