Одна вещь, которую я нашел неинтуитивной в обратном вызове didReadData GCDAsyncSocket, заключается в том, что он не вызывается снова, пока вы не выдадите другой readData. Почему он разработан таким образом? Правильно ли ожидать, что пользователь библиотеки инициирует другой вызов чтения, чтобы получить обратный вызов, или это недостаток дизайна?
e.g.
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket {
...
// initiate the first read
self.socket = newSocket;
[self.socket readDataWithTimeout:-1 tag:0];
}
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
// do what you need with the data...
// read again, or didReadData won't get called!
[self.socket readDataWithTimeout:-1 tag:0];
}