Pergunta

Eu tenho um aplicativo que usa um controlador de exibição de tabela para exibir alguns itens, depois de clicar em um desses itens que você pode selecionar para enviar este item. Assim que isso acontecer eu uso o código fornecido pela Apple "MailComposer", e envie pelo correio. No entanto, após este a rolagem na vista da tabela não é tão bom como antes.

Eu verifiquei com "vazamentos" e que não há vazamentos no meu código, no entanto, há uma grande quantidade de alocação de objeto quando o controlador de vista modal para o MFMailComposeViewController, e quando eu descartar meu controlador, tudo o que alocação de objeto ainda está lá . Como posso me livrar de tudo o que alocação de objeto ?. Qualquer ajuda será muito apreciada. Obrigado.

-Oscar

UPDATE:

Eu percebi o atraso só acontece uma vez que você clicar no Para: campo de texto no MFMailComposeViewController e tipo algo, uma vez que algo foi digitado haverá um vazamento de memória e a aplicação será lento. exata Esta mesma coisa acontece também no da Apple Composer Mail. Eu estou usando o simulador talvez por isso ?. Alguém tem uma experiência simmilar?

A maneira Estou pressenting meu controlador é:

-(void)displayComposerSheet 
{
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;

    NSString *mailSubject = appDelegate.mailTitle;
    NSString *mailBody = appDelegate.mailLink;

    NSString *formattedString = [NSString stringWithFormat:@"<a href='%@'>%@</a>", mailBody, mailBody];

    [picker setSubject:mailSubject];

    // Set up recipients
    //NSArray *toRecipients = [NSArray arrayWithObject:@"somemail@hotmail.com"]; 
    //NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil]; 
    //NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com"]; 

    //[picker setToRecipients:toRecipients];
    //[picker setCcRecipients:ccRecipients];    
    //[picker setBccRecipients:bccRecipients];

    // Attach an image to the email (Warning this causes a memory leak aknowledged by Apple)
    //NSString *path = [[NSBundle mainBundle] pathForResource:@"news_icon" ofType:@"png"];
    //NSData *myData = [NSData dataWithContentsOfFile:path];
    //[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"rainy"];

    // Fill out the email body text
    [picker setMessageBody:formattedString isHTML:YES];

    [self presentModalViewController:picker animated:YES];
    [picker release];
}

e dimissing-lo aqui:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   
    ....
    [self dismissModalViewControllerAnimated:YES];
}
Foi útil?

Solução

É um vazamento de memória conhecidos na classe MFMailComposeViewController (a partir de iOS 4.2 SDK). Os vazamentos podem ser visto até mesmo na MailComposer projeto de amostra pela Apple. Tente executar o aplicativo com o instrumento alocações e observe as Bytes geral crescendo cada vez que você clicar em cancelar e mostrar o compositor novamente.

Veja abaixo para a discussão semelhante:

  1. http://discussions.apple.com/thread.jspa?threadID = 2158170

  2. https://devforums.apple.com/thread/23510?tstart = 15

  3. https://devforums.apple.com/message/121093#121093

Outras dicas

Certifique-se de usar

controller.mailComposeDelegate = self;

e não

controller.delegate = self;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top