Question

J'ai une application qui utilise un contrôleur de vue de la table pour afficher certains éléments, après avoir cliqué sur un de ces éléments que vous pouvez choisir d'envoyer cette question. Une fois que cela arrive-je utiliser le code fourni par Apple « MailComposer », et envoyer le courrier. Cependant après le défilement dans la vue de la table n'est pas aussi lisse qu'auparavant.

J'ai vérifié avec « Fuites » et il n'y a pas de fuite dans mon code, mais il y a beaucoup d'allocation d'objets lorsque le contrôleur modal de vue pour le MFMailComposeViewController, et quand je rejette mon contrôleur, tout ce que l'allocation d'objets est toujours là . Comment puis-je me débarrasser de tout ce que l'allocation de l'objet ?. Toute aide sera fortement appréciée. Merci.

-Oscar

Mise à jour:

Je me suis rendu compte le décalage ne se produit que lorsque vous cliquez sur le champ A: textfield sur le MFMailComposeViewController et tapez quelque chose, une fois que quelque chose a été tapé, il y aura une fuite de mémoire et l'application sera lente. Cette même chose se produit également dans le Composer Mail d'Apple. J'utilise le simulateur peut-être c'est pourquoi ?. Quelqu'un at-il une expérience simmilar?

La façon dont je suis pressenting mon contrôleur est:

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

et dimissing ici:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   
    ....
    [self dismissModalViewControllerAnimated:YES];
}
Était-ce utile?

La solution

Il est une fuite de mémoire connue dans la classe de MFMailComposeViewController (à partir de 4,2 iOS SDK). Les fuites sont visibles même dans le MailComposer exemple de projet par Apple. Essayez d'exécuter l'application avec un instrument et notez les allocations Bytes global de plus en plus chaque fois que vous cliquez sur Annuler et remontrer le compositeur.

Voir ci-dessous pour la discussion similaire:

  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

Autres conseils

Assurez-vous que vous utilisez

controller.mailComposeDelegate = self;

et non

controller.delegate = self;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top