Приложение iPhone отстает после запуска и закрытия MFMailComposeViewController - PullRequest
2 голосов
/ 09 ноября 2009

У меня есть приложение, которое использует контроллер табличного представления для отображения некоторых элементов, после нажатия на один из тех элементов, которые вы можете выбрать, чтобы отправить этот элемент по электронной почте. Как только это произойдет, я использую код, предоставленный Apple «MailComposer», и отправляю почту. Однако после этого прокрутка в табличном представлении не так плавна, как раньше.

Я проверил с помощью «Утечки», и в моем коде нет утечек, однако при контроле модального представления для MFMailComposeViewController и при удалении моего контроллера все это выделение объектов происходит очень часто. , Как я могу избавиться от всего этого распределения объектов? Любая помощь будет оценена. Спасибо.

-Oscar

UPDATE:

Я понял, что задержка происходит только после того, как вы щелкнете по текстовому полю To: в MFMailComposeViewController и наберете что-нибудь, после того, как что-то будет напечатано, произойдет утечка памяти и приложение будет работать медленно. Точно так же происходит и в Mail Composer от Apple. Я пользуюсь симулятором, может быть, поэтому? У кого-нибудь еще есть подобный опыт?

Я представляю свой контроллер следующим образом:

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

и уменьшая его здесь:

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

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

Это известная утечка памяти в классе MFMailComposeViewController (начиная с iOS 4.2 SDK). Утечки можно увидеть даже в примере проекта MailComposer от Apple. Попробуйте запустить приложение с помощью инструмента Allocations, и каждый раз, когда вы нажимаете кнопку «Отмена», вы видите, как увеличиваются общие байты, и снова показывает композитора.

См. Ниже аналогичное обсуждение:

  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

0 голосов
/ 25 декабря 2010

Убедитесь, что вы используете

controller.mailComposeDelegate = self;

а не

controller.delegate = self;
...