锁定手机后AsyncUDPSocket断管,应用程序暂停在后台

Kon*_*ess 5 sockets iphone objective-c sigpipe asyncsocket

我在我的iPhone应用程序中使用AsyncUDPSocket第三方库,并且在大多数情况下它运行良好.我有一个单独的实例AsyncUDPSocket,我用于我的所有网络流量.我的应用程序在后台注册了位置跟踪,并在后台运行时唤醒并通过网络发送位置更新数据包.这一切都在背景,前景,手机锁定或解锁状态下运行,除非我执行以下操作:

  1. 启动我的应用
  2. 在我的应用设置中禁用位置跟踪(因此没有背景唤醒)
  3. 按主页按钮(应用程序进入后台,插座被"冻结"与应用程序的其余部分)
  4. 锁定电话
  5. 解锁手机
  6. 恢复应用
  7. 尝试重新启动跟踪并从套接字发送内容.一旦我尝试,我得到SIGPIPE/ EPIPE错误和应用程序崩溃.

我认为解决这个问题的最佳方法是在应用程序退出并且未启用后台跟踪时关闭并释放套接字,但是当我尝试[socket close]或者[socket release]在上面时AsyncUDPSocket,我会遇到各种EXC_BAD_ACCESS错误.我已经向开发团队提交了一个错误,但是想知道这里是否有人可以提供一些关于如何SIGPIPE完全避免错误或其他方法来保持套接字存活而不释放它的想法.谢谢.

Kon*_*ess 1

以防万一有人好奇(从这个问题的统计数据来看,他们不是),我无法确定导致错误的原因SIGPIPE,但最终解决了我的内存管理问题(这是由于错误的实现)onUdpSocketDidClose在我的委托中),这样我就可以在每次应用程序重新启动时重新初始化套接字。