我正在使用CocoaAsyncSocket容器将数据从测量仪器传输到iOS设备。传输效果很好,但是如果必须在不同的移动乐器之间进行切换,我会遇到麻烦。
如果我需要更换乐器/连接其他乐器,则必须等待一些事件:
public func socketDidDisconnect(...)
GCDAsyncSocketDelegate
来完成的
public func socketDidConnectToHost(...)
因此有两个操作需要一些时间。因为没有有效的连接,所以用户只能等待。为了通知用户正在发生的事情,我想提出一个UIAlert,直到上述事件完成为止。我该如何实现?
答案 0 :(得分:1)
信号量对于您的情况来说似乎太低了,除非您出于教育目的而这样做。
改为使用 NotificationCenter :
1)从socketDidDisconnect(...)
发布“ didDisconnectNotification” (字符串名称是任意的),并在对应处理程序中更新viewController UI,以指示用户连接问题。
2)从socketDidConnectToHost(...)
发布“ didConnectNotification” ,并在其处理程序(与1区别)中关闭连接问题指示器^。
注意:在您的viewController初次出现时,您可能会以2)开头,因此没有什么可以关闭的。
您可以在SO上找到许多与NotificationCenter
相关的示例:
https://stackoverflow.com/a/24756761/5329717
在上述两个操作是独立的(即它们可以相对于彼此以任何顺序发生)的情况下,要使用的GCD机制为 DispatchGroup 。它与您使用信号量的尝试有些相似,但是您也不需要,因为您的2个事件(断开和连接)是依赖的(即它们各自的顺序) 已修复)。
DispatchGroup 的一个有效用法示例是,当您不关心它们的到达顺序(您要么全部获得要么不进行处理)时,同步许多图像获取请求的响应。