我目前正在构建一个使用CocoaAsyncSocket的应用程序。我连接到TCP服务器并读/写一些数据。
我使用以下命令创建套接字
self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];当收到数据时,我使用FMDB将其保存到数据库中。一切正常,直到我将应用程序发送到后台(使用Homebutton),然后恢复到它。调试器显示,UI被冻结并且没有响应,它正在等待semaphore_wait_trap。
发布于 2012-09-21 13:38:51
不要将主队列为delegateQueue参数的参数。使用全局并发队列之一或您自己创建的串行/并行队列。
更新:我刚刚查看了GCDAsyncSocket的实现,现在意识到委托队列和方法与实际的读/写操作是异步触发的,这些操作发生在内部队列上,所以我的建议要么是无关紧要的(取决于你在完成方法中实际做了什么),要么是至少与你所遇到的问题无关。我认为发生的情况是内部套接字正在关闭,根据iOS App Programming Guide。也就是说:
您正在使用的GCDAsyncSocket类有一些似乎旨在处理此问题的方法,例如-autoDisconnectOnClosedReadStream,我认为您只需要添加一些代码来处理断开连接/连接重新建立的情况。
https://stackoverflow.com/questions/12503998
复制相似问题