我发现 GCDAsyncSocket 的 didReadData 回调不直观的一件事是,除非您发出另一个 readData,否则它不会再次被调用。为什么要这样设计?期望库的用户启动另一个读取调用以获得回调是否正确,或者这是一个设计缺陷?
例如
- (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];
}