Intereting Posts
Расчет размера содержимого UITextView после установки текста Воспроизведение видео в iOS внутри пользовательского представления Потоковая mp4 от контроллера Grails, не работающая на iPhone пример исходного кода для приложения iPhone, который показывает Edit / Delete / Add rows для UITableView EKEvent.notes возвращает (null), даже если EKEvent.hasNotes возвращает ДА Действие при выходе из приложения ios -allKeys на фоновом потоке приводит к ошибке: __NSDictionaryM был мутирован при перечислении Невозможно получить ответ с использованием AFNetworking 2.0 с использованием метода GET Перезагрузка / обновление ASIHTTPRequest во время выполнения UITabbarController – как отменить выбор всех вкладок в iOS 5.0 и iOS 4.3 Экзамен Objective-C Дольше обычного времени компиляции в Xcode Раскрутка концепции использования VS xib Как выравнивать текст в UITextField вертикально в центре? Почему нельзя смешивать два GPUImagePicture с GPUImageMovie

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

У меня есть приложение для камеры, в котором пользователь может делиться фотографиями, сделанными по электронной почте. Я использую 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 для выбора размера изображения для отправки