【问题标题】:MFMailComposeViewController never deallocatesMFMailComposeViewController 从不释放
【发布时间】:2014-05-18 14:14:03
【问题描述】:

我正在展示一个像这样的 MFMailComposeViewController:

mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[self presentViewController:mc animated:YES completion:NULL];
 mc = nil;

并使用委托方法将其删除:

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

问题是 VC 永远不会被释放,在我的应用程序中打开和关闭“发送电子邮件”功能会占用内存但不会释放它。

我错过了什么?我不知道如何以其他方式做到这一点,并且我所有其他 VC 在自己调用了dismissviewcontroller 后自行解除分配。

【问题讨论】:

  • 你对mailComposeDelegate有强烈的参考吗?如果是这样,请尝试使其变弱。
  • mc是局部变量还是实例变量?
  • 没有强引用。尝试了实例变量和局部变量。

标签: ios automatic-ref-counting


【解决方案1】:

为什么要设置mc = nil;紧接在 presentViewController:mc?

之后

你应该这样做:-

mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[self presentViewController:mc animated:YES completion:NULL];

然后

- (void) mailComposeController:(MFMailComposeViewController *)controller 
            didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
 [self dismissViewControllerAnimated:YES completion:^{
    mc=nil;
}];
}

顺便说一句,MFMailComposeViewController 存在内存泄漏问题。这不仅仅是你的问题,我们都有同样的问题。

  1. Cancelling MFMailComposeViewController causes a memory leak?

  2. Memory leak for MFMailcomposeviewcontroller on send mail

【讨论】:

  • 1) 这假定mc 是实例变量而不是局部变量。 2)您的更改没有任何区别。在展示控制器后立即设置mc=nil 没有任何问题。
  • 我尝试了 mc=nil 的各种组合,但没有任何效果。我也试过从不碰它。我尝试了局部变量和实例变量。没有变化。
  • 很高兴知道这不仅仅是我。这让我快疯了。我不知道为什么我在谷歌搜索时没有找到那些线程!
  • @nickdnk 是的,我的应用也有同样的问题。每次我呈现和关闭 MFMailComposeViewController 时,它都会增加大约 1 mb 的内存。
  • 所以基本上苹果需要看看这个。看起来我们几乎无能为力。太糟糕了。赞成链接到其他线程。
猜你喜欢
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
相关资源
最近更新 更多