Pregunta

Tengo una aplicación que utiliza un controlador de vista de tabla para mostrar algunos elementos, después de hacer clic en uno de esos artículos que usted puede seleccionar para enviar por correo electrónico este artículo. Una vez que suceda utilizo el código proporcionado por Apple "MailComposer", y enviar el correo. Sin embargo después de esto el movimiento en sentido vertical en la vista de tabla no es tan suave como antes.

he comprobado con "fugas" y no hay fugas en mi código, sin embargo hay una gran cantidad de asignación de objetos cuando el controlador de vista modal para el MFMailComposeViewController, y cuando me despido de mi controlador, todo lo que la asignación objeto sigue ahí . ¿Cómo puedo deshacerme de todo lo que la asignación objeto ?. Cualquier ayuda será apreciada. Gracias.

-Oscar

ACTUALIZACIÓN:

Me he dado cuenta el retraso sólo ocurre una vez que haga clic en el campo Para: campo de texto en el MFMailComposeViewController y escribe algo, una vez que algo se ha escrito habrá una pérdida de memoria y la aplicación será lenta. Esto exactamente lo mismo ocurre también en editor de correo de Apple. Estoy utilizando el simulador tal vez esta es la razón ?. ¿Alguien más tiene una experiencia simmilar?

La forma en que estoy pressenting mi controlador es:

-(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];
}

y dimissing aquí:

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

Solución

Es una pérdida de memoria conocido en la clase MFMailComposeViewController (a partir de iOS 4.2 SDK). Las fugas pueden ser vistos incluso en el MailComposer proyecto de ejemplo por Apple. Trate de ejecutar la aplicación con el instrumento Asignaciones y observe los Bytes totales crecen cada vez que haga clic en Cancelar y mostrar el compositor de nuevo.

Véase más abajo para la discusión similar:

  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

Otros consejos

Asegúrese de que utiliza

controller.mailComposeDelegate = self;

no

controller.delegate = self;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top