【问题标题】:iPhone application lags after launching and dismissing MFMailComposeViewControlleriPhone 应用程序在启动和关闭 MFMailComposeViewController 后滞后
【发布时间】:2010-12-14 18:24:24
【问题描述】:

我有一个应用程序,它使用表格视图控制器来显示一些项目,单击其中一个项目后,您可以选择通过电子邮件发送该项目。一旦发生这种情况,我使用苹果“MailComposer”提供的代码,并发送邮件。然而,在此之后,表格视图中的滚动不像以前那么平滑。

我检查了“泄漏”并且我的代码中没有泄漏,但是当 MFMailComposeViewController 的模态视图控制器和当我关闭我的控制器时,所有对象分配仍然存在.我怎样才能摆脱所有的对象分配?任何帮助将不胜感激。谢谢。

-奥斯卡

更新:

我已经意识到只有在您单击 MFMailComposeViewController 上的 To: 文本字段并输入内容后才会出现延迟,一旦输入内容就会出现内存泄漏并且应用程序会运行缓慢。同样的事情也发生在 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];
}

【问题讨论】:

  • 你应该展示一些你如何实例化和呈现邮件撰写视图控制器的代码

标签: iphone allocation mfmailcomposeviewcontroller lag


【解决方案1】:

这是MFMailComposeViewController 类中的已知内存泄漏(从 iOS 4.2 SDK 开始)。甚至可以在 Apple 的 MailComposer 示例项目中看到泄漏。尝试使用 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

【讨论】:

  • 其中一些讨论已经过时了,但我仍然在 iOS 4.2 SDK 上看到了这个问题。有谁知道是否有计划解决这个问题?
  • 我刚刚遇到了同样的问题,不知道如何解决。只有离开应用程序并启动邮件可能会解决这个问题 - 虽然不能提供良好的用户体验(但迟缓或滞后的 UI 仍然更糟糕的是恕我直言)
  • 我试图找到一些其他的解决方案,但只发现以下行为:MFMailComposeViewController 被关闭后,将应用程序置于后台并立即唤醒它。在我的情况下,在此之后视图的滚动正常(应用程序没有重新启动,而只是重新激活)。
  • @marcus:您如何将应用程序置于后台?你将如何再次唤醒它?我认为你必须进入私有 API 领域,这将是让你的应用被 Apple 拒绝的可靠方法。否则请告诉我
  • @MyCSharpCorner 在我的最后一条评论中,我刚刚描述了我在测试时注意到的一种行为。当我通过按主页按钮手动将应用程序置于后台并通过选择它的图标再次启动它时,滚动问题不再明显。
【解决方案2】:

确保你使用

controller.mailComposeDelegate = self;

而不是

controller.delegate = self;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    相关资源
    最近更新 更多