Intereting Posts
UIImageView не перерисовывается, когда изображение установлено на ноль Различные результаты между CurrentViewController и pushViewController Пользовательский интерфейс SiriKit Intents – Как использовать INImage? Могу ли я сделать запрос быстрее? (facebook graph api) Возьмите значение из словаря <String, Any> в Swift 3 возможно ли получить настройки устройства на iOS? response-native-fbsdk: "ld: библиотека не найдена для -l-lRNSDKCoreKit" Как отправить строку JSON со специальными чататерами в iOS? подклассификация TWTRSearchTimelineDataSource в TwitterKit / Fabric iOS для геолокации Является ли iOS-симулятор менее эффективной анимацией? Создайте определенную структуру JSON в Swift XCode Key Chain Обновите мой сертификат Изменение размера шрифта в NSAttributedString без потери стиля HTML – Swift Написание кордово-ионного плагина в Swift Загрузка другого контроллера просмотра после того, как приложение уже запущено

Утечка памяти при отправке изображения в виде вложения по электронной почте

У меня есть приложение для камеры, в котором пользователь может делиться фотографиями, сделанными по электронной почте. Я использую MFMailComposerViewController для отправки почты. Вот фрагмент кода.

- (void) contactEmailRecepients:(NSArray *)emailIDs subject:(NSString *)subject attachment:(NSMutableDictionary *)attachmentDictionary sender:(UIViewController *)sender { if ([MFMailComposeViewController canSendMail]) { mailViewController = [[MFMailComposeViewController alloc] init]; mailViewController.mailComposeDelegate = self; [mailViewController setToRecipients:emailIDs]; [mailViewController setSubject:subject]; NSData *attachmentData = [attachmentDictionary objectForKey:@"attachmentData"]; if (nil != attachmentData) { [mailViewController addAttachmentData:attachmentData mimeType:[attachmentDictionary objectForKey:@"mimeType"] fileName:[attachmentDictionary objectForKey:@"fileName"]]; } [sender presentViewController:mailViewController animated:YES completion:^{}]; attachmentData = nil; [attachmentDictionary removeAllObjects]; attachmentDictionary = nil; } else { // display error message } } 

Моя проблема – каждый раз, когда я отправляю почту через мое приложение, виртуальная память (Virtual Memory) увеличивается на 6/7 МБ. Но этого не происходит, если я прокомментирую следующую часть.

  if (nil != attachmentData) { [mailViewController addAttachmentData:attachmentData mimeType:[attachmentDictionary objectForKey:@"mimeType"] fileName:[attachmentDictionary objectForKey:@"fileName"]]; } 

Увеличенная виртуальная машина связана с CGRasterData а ответственная библиотека – CoreGraphics а ответственный вызывающий CGDataProvideCreateWithCopyOfDataCGDataProvideCreateWithCopyOfData когда я проверяю ее с помощью инструментов Xcode 5.0.2. Так что где-то создается копия, которая не будет выпущена позже. Я подозреваю, что память выделена отображение изображения в электронной почте. UIActionSheet не освобождается.

Любая помощь приветствуется.

EDIT: добавление фрагмента кода, в котором инициализируется attachmentData .

 - (void)postPhotoFromPath:(NSString *)filePath sender:(UIViewController *)sender { NSData *photoData = [NSData dataWithContentsOfFile:filePath]; if (nil == photoData) { //display error message } else { NSString *fileName = [[filePath componentsSeparatedByString:@"/"] lastObject]; [self contactEmailRecepients:nil subject:nil attachment:[NSDictionary dictionaryWithObjectsAndKeys: photoData, @"attachmentData", @"image/jpeg", @"mimeType", fileName, @"fileName", nil] sender:sender]; } } 

Также я тщательно заметил, что виртуальная машина увеличивается точно, когда я получаю UIActionSheet относительно того, какой размер изображения нужно отправить (отправить исходный размер или уменьшенный размер). Я прилагаю скриншот к тому же здесь. UIActionSheet для выбора размера изображения для отправки