Pergunta

Olá pessoas maravilhosas de stackoverflow!

Eu tenho um problema.

Eu estou trabalhando em um aplicativo que irá tirar várias fotos e cada vez que ele vai ampliá-las, mostrar uma pré-visualização, salvá-los e, em seguida, carregar o UIImagePickerController novamente.

Mas depois de tomar cerca de 5 a 6 fotos morre.

Eu acho que ele está morrendo porque eu tenho uma UIImageView que eu definir e depois de tantas fotos do UIImage que eu defini-lo com não faz referência a qualquer coisa.

Eu acho que o culpado está em algum lugar aqui ...

Existe algo que eu estou fazendo errado?

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    [backgroundImage setImage: [[UIImage alloc] initWithCGImage:[[info objectForKey:UIImagePickerControllerOriginalImage] CGImage]]];
    [backgroundImage setTransform:CGAffineTransformRotate(CGAffineTransformMakeScale(zoom/3, zoom/3), 1.570796327)];

    UIGraphicsBeginImageContext([backgroundView bounds].size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextFillRect(ctx, [backgroundView bounds]);
    [backgroundView.layer renderInContext:ctx];
    UIImage* screenImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    UIImageWriteToSavedPhotosAlbum(screenImage, self, @selector(ImageDidSave:didFinishSavingWithError:contextInfo:), nil);

    [self dismissModalViewControllerAnimated:YES];
}

backgroundImage é a que, eventualmente, tenta usar uma imagem que não é mais referenciando nada.

Deixe-me saber como eu posso esclarecer.

Muito obrigado a todos que ficou comigo até aqui!

Foi útil?

Solução

Este é um palpite, mas eu aposto que você está ficando sem memória e ser morto. Tente autoreleasing a imagem que você enviar para o fundo nesta linha:

[backgroundImage setImage: [[[UIImage alloc] initWithCGImage:[[info objectForKey:UIImagePickerControllerOriginalImage] CGImage]] autorelease]];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top