我的应用程序是在大约 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
}