Я предлагаю вам реализовать какое-то управление потоком:
Самый простой подход - сбросить данные, если ваши буферы заполнены.Для видеопотоков кадры могут быть отброшены.Я не знаю, возможно ли то же самое с вашими данными.
Другой подход заключается в переключении с API на основе событий на NSURLConnection (где фреймворк контролирует, когда вы должны реагировать)в CFSocket класс, где вы можете читать данные, когда вы готовы к этому.Он более низкоуровневый, требует отдельного потока и некоторой продвинутой логики, такой как переход в спящий режим, когда буфер заполнен, и пробуждение, когда основной поток отобразил больше данных и освободил больше места в буфере.При таком подходе вы, в основном, опираетесь на механизм управления потоком TCP.
Еще один подход заключается в использовании другого сетевого протокола, где у вас больше контроля над объемом отправляемых данных.