【问题标题】:Memory leak attaching multiple photos in MFMailComposerViewController在 MFMailComposeViewController 中附加多张照片的内存泄漏
【发布时间】:2013-04-23 05:37:16
【问题描述】:

我正在尝试在 MailComposerViewController 中附加多张照片,并且我正在使用 ALAssetPickerViewController 选择多张照片。我有一个NSMutableArray,其中包含选定资产的引用。我正在实现一个for loop,它正在枚举选定资产的array,以获得UIImage 的NSData,并且UIImage 用CGImageRef 初始化。 代码如下:

@autoreleasepool
{
    NSString *emailTitle = @"Test";
    NSString *messageBody = @"IOS programming is so fun!";
    NSArray *toRecipents = [NSArray arrayWithObjects:@"abc@gmail.com", nil];

    MFMailComposeViewController *tempmcvc = nil;
    tempmcvc = [[MFMailComposeViewController alloc] init];
    tempmcvc.mailComposeDelegate = self;
    [tempmcvc setSubject:emailTitle];
    [tempmcvc setMessageBody:messageBody isHTML:YES];
    [tempmcvc setToRecipients:toRecipents];
    tempmcvc.modalPresentationStyle=UIModalPresentationFullScreen;
    tempmcvc.navigationBar.barStyle = UIBarStyleBlackOpaque;

    for (AlAsset *assets in SelectedAssetsarray) 
    {
        @autoreleasepool
        {
            UIImage *attachImagTemp = nil;
            NSData *myData = nil;
            CGImageRef iref = [assets.defaultRepresentation fullScreenImage];
            NSString *nameOfImgTemp;
            attachImagTemp = [UIImage imageWithCGImage:iref];
            nameOfImgTemp = assets2.defaultRepresentation.filename;                      
            myData = UIImageJPEGRepresentation (attachImagTemp, 1.0);
            [tempmcvc addAttachmentData:myData mimeType:@"image/jpeg" fileName:nameOfImgTemp];

            myData = nil;
            attachImagTemp = nil;
            iref = nil;
            nameOfImgTemp = nil;
            ALAsset *_temp = assets2;
            _temp = nil;

        }
    }
}

dispatch_async(dispatch_get_main_queue(), ^(void) {
    [self presentModalViewController:tempmcvc animated:YES]
});

我附加的每个资产几乎都是 2 MB,但内存不断减少,我无法正确释放内存;一些内存泄漏,请帮助查找泄漏。

【问题讨论】:

  • 我看到你没有发布 tempmcvc。我说的对吗?
  • 尝试通过CGImageRelease 释放CGImageRef。它可能会帮助你。因为我们必须明确释放CGImageRef 对象。

标签: iphone ios multithreading cgimage alasset


【解决方案1】:

尝试使用以下代码释放附件图像CGImageRelease(attachImagTemp);释放缓存而不是设置为nil。

如果您没有使用过 ARC,也可以按照 Avi 的建议释放 tempmcvc 对象。

【讨论】:

  • CGImageRelease 用于发布CGImageRef,而不用于发布UIImage *。
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2020-02-15
相关资源
最近更新 更多