uigraphicsgetimage из текущего валютного контекста памяти - PullRequest
2 голосов
/ 14 апреля 2011

В моем приложении для ipad я использую UIGraphicsGetImageFromCurrentImageContext (), память увеличивается очень сильно, и приложение иногда падает. Код указан ниже

UIImage * blendImages(UIImage *background, UIImage *overlay)
{
    UIImageView* imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024.0,700.0)];
    UIImageView* subView   = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024.0,700.0)];
    subView.alpha = 1.0; 
    [imageView addSubview:subView];
    imageView.image=background;
    subView.image=overlay;
    UIGraphicsBeginImageContext(imageView.frame.size);
    [imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage* blendedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [subView release];
    [imageView release];    
    return blendedImage;
}

Метод blendImages вызывается в цикле, и я дал пул autorelease Я видел похожие вопросы, связанные с увеличением памяти при использовании UIGraphicsGetImageFromCurrentImageContext (), но, к сожалению, нет правильного ответа, любая помощь, пожалуйста .. ?????

1 Ответ

0 голосов
/ 07 марта 2012

Я не думаю, что проблема в этом коде.UIGraphicsGetImageFromCurrentImageContext () возвращает автоматически выпущенный UIImage *.Автоматически освобожденные объекты остаются в пуле автоматического выпуска до тех пор, пока он не будет явно удален.Вы говорите, что управляли autoreleasepool, но это не решило проблему.Это сделало для меня попробовать следующий код:

-(void)someMethod{
//interesting stuff

//start a new inner pool 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
UIImage* image = [blendImages(backGround, overlay)retain];

//do things with image

//first release our strong reference to the object
[image release];
//drain the inner pool from all autoreleased objects
[pool release];
}

Вы также можете использовать CGBitmapContextCreateImage, чтобы получить сохраненный CGImage из контекста.Затем вы можете явно вызвать CGImageRelease, когда закончите

надеюсь, что это ответит на ваш вопрос

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