我有一个使用表格视图控制器来显示某些项目的应用程序,点击其中一个项目后,您可以选择通过电子邮件发送此项目。一旦发生这种情况,我使用苹果“MailComposer”提供的代码,然后发送邮件。但是在此之后,表视图中的滚动不像以前那样平滑。
我检查了“泄漏”并且我的代码中没有泄漏,但是当MFMailComposeViewController的模态视图控制器有大量的对象分配时,当我关闭我的控制器时,所有对象分配仍然存在。我怎样才能摆脱所有的对象分配?任何帮助将不胜感激。谢谢。
-Oscar
更新:
我已经意识到只有在你点击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];
}
答案 0 :(得分:1)
这是MFMailComposeViewController
类中已知的内存泄漏(从iOS 4.2 SDK开始)。 Apple可以在 MailComposer 示例项目中看到泄漏。尝试使用Allocations工具运行应用程序,并注意每次单击取消并再次显示作曲家时,总字节数会增长。
见下面的类似讨论:
答案 1 :(得分:0)
确保使用
controller.mailComposeDelegate = self;
而不是
controller.delegate = self;