Я загружаю файл с iPhone на сервер с HTTP POST и наблюдаю за ходом соединения NSURLConnection: didSendBodyData: totalBytesWritten: totalBytesExpectedToWrite. Проблема в том, что прогресс не гладкий. Начало файла проходит очень быстро в четырех фрагментах по 32 КБ, затем прогресс замедляется с меньшими фрагментами, пока не будет достигнут общий результат. Затем didSendBodyData больше не вызывается в течение некоторого времени, прежде чем ответ наконец возвращается. Таким образом, индикатор выполнения, управляемый кодом, идет быстро (почти мгновенно) в течение первых 128 КБ, затем медленно, а затем «залипает» на 100% в течение длительного времени.
Некоторые исследования предполагают, что первые четыре блока мгновенно попадают в «буфер ядра» телефона, и с этого момента данные поступают в буфер по мере того, как данные стекают с другого конца. Прогресс достигает 100%, когда поступают последние данные, но затем задерживается, пока буфер очищается на обратной стороне.
Я бы предпочел показывать прогресс на основе данных, поступающих на сервер, или вообще не иметь буфера. Кто-нибудь знает, как я могу это сделать?