#ios #sockets #gcdasyncsocket
#iOS #сокеты #gcdasyncsocket
Вопрос:
Как мне правильно писать «как можно быстрее» без использования тегов, но без создания больших буферов в памяти из неписаных больших двоичных объектов данных и как мне отслеживать ход записи в сокет операционной системы? Должен ли я использовать socket:didWritePartialDataOfLength:tag:
события?
Вызывается, когда сокет записал некоторые данные, но еще не завершил всю запись. Это может использоваться для таких вещей, как обновление индикаторов выполнения.
GCDAsyncSocket
Будет ли когда-нибудь зависать новый вызов write, потому что он не будет выделять больше памяти?
Как часто это срабатывает? Как я узнаю, прежде чем ставить в очередь новую запись, сколько уже отложено в памяти?
Ответ №1:
Отвечая на мой собственный вопрос, оказалось, что на самом деле экспериментов было достаточно.
Запишите максимум два фрагмента, а затем запишите новый фрагмент, когда получите обратный вызов от GCDAsyncSocket о том, что фрагмент был записан. Используйте обратный вызов с частичными данными, чтобы отслеживать более точный прогресс обработки. Используйте теги для нумерации блоков. Вот и все.