我在技术说明TN2277中读到,当应用程序进入后台时,关闭各种网络套接字非常重要。这很可能还包括 GKSession。
他们说进入后台时需要一个过期处理程序,并且如果网络代码必须与其他对等点说“再见”,则必须异步调用它是很重要的。
那么 GKSession sendData 方法是异步的还是阻塞的?
在 iOS 6 中的某些情况下,GKSession 阻塞主线程肯定存在问题。目前,我们无法将 iPad 池移动到 iOS 6,因为我们的企业 GKSession 网络应用程序遇到了这些阻塞问题(但在 iOS 5 中没有或更早)。例如,从服务器 iPad 同时向超过 4 个 iPad 发送文件会导致阻止行为。在 iOS 5 中,我们可以毫无问题地将文件同时发送到多达 15 个连接的客户端。
此外,我们的初步测试表明,混合使用 iOS 5 和 6 设备如果 iOS 6 设备在 iOS 5 设备之后连接,那么 iOS 6 设备将遇到主线程锁定。
我已向 iOS 开发中心发布了一份事件报告,但没有收到任何回复...
11 月 30 日更新:我现在收到了 Apple 的回复,他们将其视为 iOS 6 中 GameKit 中的一个错误并正在调查。如果您在 iOS 6(但不是 iOS 5 或更早版本)中也遇到 GKSession 阻塞问题,那么您应该将其报告为错误。