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];
}