Я только начинаю с программирования сокетов на iOS, и я изо всех сил пытаюсь определить использование события NSStreamEventHasSpaceAvailable
для NSOutputStreams
.
С одной стороны, официальная документация Apple (листинг 2) показывает, что в методе делегата -stream:handleEvent:
данные должны быть записаны в выходной буфер с сообщением -write:maxLength:
, постоянно передавая данные из буфера, всякий раз, когда принимается событие NSStreamEventHasSpaceAvailable
.
С другой стороны, этот учебник от Ray Wenderlich и этот iOS Пример сокета TCP в GitHub игнорирует событие NSStreamEventHasSpaceAvailable
и просто продолжайте и -write:maxLength:
в буфер, когда им нужно (даже игнорируя -hasSpaceAvailable
).
В-третьих, есть этот примерный код, который, как представляется, делает оба...
Итак, мой вопрос, каков правильный способ обрабатывать записи данных в NSOutputStream
, который подключен к сокету? И каково использование кода события NSStreamEventHasSpaceAvailable
, если он может (по-видимому) игнорироваться? Мне кажется, что происходит очень удачное выполнение UB (в примерах 2 и 3) или существует несколько способов отправки данных через NSOutputStream
на основе сокетов...