Приложение iPhone отстает после запуска и отключения MFMailComposeViewController

StackOverflow https://stackoverflow.com/questions/1703266

Вопрос

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

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

-Оскар

Обновить:

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

Способ, которым я нажимаю на свой контроллер, заключается в следующем:

-(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];
}
Это было полезно?

Решение

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

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

  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

Другие советы

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

controller.mailComposeDelegate = self;

и не

controller.delegate = self;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top