Xcode 报告 SocketStream 对象在流关闭后泄漏。泄漏可以在 iPhone 上可靠地重现,但不能在模拟器或 Mac 上重现。
流是用 来创建的CFStreamCreatePairWithSocketToCFHost
,然后使用、关闭和释放,每次都会留下另一个 SocketStream。
我检查了 Instruments 中的保留历史记录,发现每次关闭读写流时,SocketStream 的保留计数为 2。(我猜这两个保留是_CTServerConnecionCreateWithIdentifier
从 CoreTelephony 完成的)
查看这些流的使用方式,我注意到它的网络服务类型属性设置为 VoIP(或CFStreamNetworkServiceTypeVoIP
或NSStreamNetworkServiceTypeVoIP
)。我注释掉了这些行,泄漏就消失了。
那么,关闭 VoIP 服务流的正确方法是什么?它是否与 VoIP 弃用有关?