Запрос относительно "CGImageCreateWithImageInRect" - PullRequest
1 голос
/ 16 марта 2009

я пытаюсь вырезать изображение и замаскировать его .... что я могу сделать успешно .. но программа завершается через несколько минут со статусом 101

- (void) maskImage {

        if(scopeOn==1){

    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    cachedImage=[UIImage imageNamed:@"loop.png"];
    cachedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

     imageRef = [cachedImage CGImage];

     subImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(scopeLoc.x-25, scopeLoc.y-25, 50, 50));
     xMaskedImage = CGImageCreateWithMask(subImage, mask);
    zoomImg.image = [UIImage imageWithCGImage:xMaskedImage]; // retImage;
    [zoomImg setCenter:scopeLoc];

    [self addSubview:zoomImg];

    CGImageRelease(subImage);
            CGImageRelease(xMaskedImage);

}

}

это код, который я использую .... так как я не выделяю явную память, я предполагаю, что функция CGImageCreateWithImageInRect выделяет память, но не освобождается ... эта функция вызывается через каждые 0,1 секунды ... в конечном итоге выделяется большое количество памятных записок (я видел это в мониторе производительности утечки памяти)

Так есть ли другой способ, с помощью которого я мог бы достичь того же без этой функции ??

Ответы [ 3 ]

4 голосов
/ 16 марта 2009

Вы выпускаете переменную subImage позже? CGImageCreateWithImageInRect следует правилу «Создать» из CoreFoundation и, следовательно, требует от вас освобождения переменной позже.

1 голос
/ 25 марта 2009

Вы можете освободить память, выделенную для вашего subImage и xMaskedImage, выполнив

    CGImageRelease(subImage);           // Decrements the retain count of a bitmap image.
    subImage=nil;
CGImageRelease(xMaskedImage);
xMaskedImage=nil;

Это определенно решит вашу проблему.

0 голосов
/ 17 марта 2009

Возможно, попробуйте добавить тест, если zoomImg уже является подпредставлением:

if (zoomImg.superview != self)
    [self addSubview:zoomImg];

хотя это довольно длинный выстрел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...