AFNetworking Error Domain = NSPOSIXErrorDomain Code = 12 "Операция не может быть завершена. Невозможно выделить память - PullRequest
3 голосов
/ 16 января 2012

Я отправляю много файлов изображений через AfNetworking на сервер Rails. На грани, а иногда и 3G, я получаю эту ошибку: Error Domain = NSPOSIXErrorDomain Code = 12 "Операция не может быть завершена. Невозможно выделить память".

Это код, который я использую для отправки файлов: https://gist.github.com/cc5482059ae3023bdf50

Есть ли способ это исправить?

В Интернете некоторые люди предлагают обходной путь для потоковой передачи файлов. Я не смог найти учебник о потоковой передаче нескольких файлов с использованием AFNetworking. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 01 июня 2012

Насколько велики изображения? А сколько ты пытаешься отправить?

Кажется, я не могу найти простой способ реализации NSInputStream с использованием AFNetworking, но есть определенно одна вещь, которую вы должны попробовать: избегать помещения больших объектов в пул авто-релиза. Когда вы создаете большие экземпляры NSData, инсиндирующие цикл for, и они идут в пул авто-релиза, вся эта память остается в памяти до тех пор, пока длится цикл. Это один из способов его оптимизации:

for (int i=0; i<[self.sImages count]; i++) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSData *imageData = UIImageJPEGRepresentation([self.sImages objectAtIndex:i], 0.7);
    [formData appendPartWithFileData:imageData name:@"pics[]" fileName:@"avatar.jpg" mimeType:@"image/jpeg"];
    pool drain];
}

Или, если вы используете LLVM3:

for (int i=0; i<[self.sImages count]; i++) {
    @autoreleasepool {
        NSData *imageData = UIImageJPEGRepresentation([self.sImages objectAtIndex:i], 0.7);
        [formData appendPartWithFileData:imageData name:@"pics[]" fileName:@"avatar.jpg" mimeType:@"image/jpeg"];
    }
}
0 голосов
/ 18 января 2013

Я знаю, что прошло много времени с тех пор, как был задан этот вопрос, но я просто должен дать два своих цента по этому вопросу.

Проведя большую часть недели, пытаясь выяснить это, вот где я сейчас нахожусь:

  • Эта проблема возникает у меня на слегка испорченном старом iPhone 4 под управлением iOS 5.1.1
  • Не могу воспроизвести его на не испорченном iPhone 4S под управлением той же iOS 5.1.1

Возможно, это связано с неправильной сетью самого оборудования телефона или с необходимостью регулирования пропускной способности (или просто с ошибкой в ​​NSURLConnection):

http://aws.amazon.com/articles/0006282245644577

https://forums.dropbox.com/topic.php?id=25351

Ошибка 12 POSIX («Невозможно выделить память») при загрузке файлов с iPhone

Я бы перешел в ASIHTTPRequest, но он больше не поддерживается, поэтому его стоит реализовать. Возможно, мне все же стоит попробовать AFNetworking, но я действительно начинаю думать, что это проблема, которая уже была исправлена ​​в iOS (или, может быть, в моем случае это плохой iPhone).

Но я не могу на всю жизнь найти простое объяснение этому.

...