Ошибка AFNetworking Domain=NSPOSIXErrorDomain Code=12 "Не удалось завершить операцию.Не удается выделить память
-
28-10-2019 - |
Вопрос
Я отправляю много файлов изображений через AFNetworking на сервер Rails.На edge и иногда 3G я получаю эту ошибку:Ошибка Domain=NSPOSIXErrorDomain Code=12 "Не удалось завершить операцию.Не удается выделить память".
Это код, который я использую для отправки файлов: https://gist.github.com/cc5482059ae3023bdf50
Есть ли способ это исправить?
В Интернете некоторые люди предполагают, что обходным решением было бы передавать файлы в потоковом режиме.Мне не удалось найти руководство по потоковой передаче нескольких файлов с помощью AFNetworking.Как я могу это сделать?
Решение
Насколько велики изображения?А сколько вы пытаетесь отправить?
Кажется, я не могу найти простой способ реализовать NSInputStream
с помощью AFNetworking
, но определенно есть одна вещь, которую вы должны попробовать, а именно избегать помещения больших объектов в пул автозапуска.Когда вы создаете большие экземпляры NSData в цикле for, и они собираются в пул автозапуска, вся эта память остается в памяти до тех пор, пока длится цикл.Это один из способов его оптимизации:
Или, если вы используете LLVM3:
родовое словоДругие советы
Я знаю, что прошло много времени с тех пор, как был задан этот вопрос, но я просто должен выложить свои два цента по этому поводу.
Потратив большую часть недели на попытки разобраться во всем этом, вот где я сейчас нахожусь:
- Эта проблема возникла у меня на слегка потрепанном старом 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
Ошибка POSIX 12 ("Не удается выделить память") при загрузке файлов с iPhone
Я бы перешел на ASIHTTPRequest, но он больше не поддерживается, так что теперь его стоит внедрить.Возможно, мне все же стоит попробовать AFNetworking, но я действительно начинаю думать, что это проблема, которая уже исправлена в iOS (или, возможно, это дрянной iPhone в моем случае).
Но я ни за что на свете не смогу найти этому простого объяснения.