Сборщик мусора и основная графика - PullRequest
2 голосов
/ 08 октября 2010

Я пишу создать CGImageRef из метода Path. Это:

- (CGImageRef)createImage:(NSString*)path
{
    // Create NSURL
    NSURL *url = [NSURL fileURLWithPath:path];
    CFURLRef cfURL = (CFURLRef)url;

    // Create image from source
    CGImageRef image = NULL;
    CGImageSourceRef imageSource = NULL;
    imageSource = CGImageSourceCreateWithURL(cfURL, NULL);
    if(imageSource != NULL) {
        image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);  // LEAK
        CFRelease(imageSource);
    } else {
        NSLog(@"Could not load image");
        return NULL;
    }

    // Scale Image
    if(image != NULL) {
        // Create context
        CGRect rect = CGRectMake(0.0f, 0.0f, CGImageGetWidth(image), CGImageGetHeight(image));
        CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
        CGContextRef context = CGBitmapContextCreate(NULL, rect.size.width, 
                                                 rect.size.height, 8, 0, 
                                                 colorSpace, 
                                                 kCGImageAlphaPremultipliedFirst);
        CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
        CGContextDrawImage(context, rect, image);   // LEAK
        CGContextFlush(context);
        CGColorSpaceRelease(colorSpace);
        CGImageRelease (image);

        // Create scaledImage
    scaledImage = CGBitmapContextCreateImage(context);  // LEAK
    image = scaledImage;
    CGContextRelease (context);
    }

    return image;
    }   

Я включил сборщик мусора. Когда я использую Инструмент, я нахожу утечку в CGImageSourceCreateImageAtIndex, CGContextDrawImage и CGBitmapContextCreateImage. Где ошибка, пожалуйста? Как мне управлять памятью в Core Graphics, когда я включаю сборщик мусора? Спасибо и извините за мой английский.

1 Ответ

0 голосов
/ 08 октября 2010

Возможно, утечка произошла из-за того, что вы не освобождаете CGImageRef, возвращенный методом.

...