Swift:多对等连接 + UI 更新



我的应用程序是在大约 5 台 iPad 之间进行通信,并根据通过多对等连接框架接收的数据进行更新。

其中一台 iPad 执行以下操作:它获取其当前位置并将其发送给其他对等方。对等方根据收到的位置更新 UI。

我发现存在一个问题,当iPad需要将数据包发送给其他人时,它会导致其UI没有立即更新。UI 事件停滞不前,直到它完成发送数据包。由于位置不断更新,所有这些事件都会不断触发。

我试图将发送数据包放在线程中:

  let bgQueue = DispatchQueue(label: "hk.edu.polyu.isurf.sendqueue", qos: .utility, attributes: .concurrent) 

然后将发送数据包的代码放入此 bgQueue 中:

func sendPacket {
  bgQueue.async {
     // create packet, and send 
  }
}

我的位置更新代码将导致以下情况:

func receiveLocation() {
   sendPacket()
   updateUI()
}

如何提高效率?UI现在基本上无法更新,严重"滞后"。

我试图更改 bgQueue 的类型,但没有改进。

谢谢。

您应该确保在主队列上更新您的 UI。

如果您尝试在会话中更新 UI 确实有 Recieve 函数,这是一个在后台运行的函数。这意味着在其中所做的任何 UI 更改都需要放入调度到主队列中,以便立即进行更新。

DispatchQueue.main.async
{
// UI updates go here
}

最新更新