React Native中的iOS websocket内存问题

Ste*_*sen 11 objective-c websocket ios react-native

在React Native中使用websocket blob实现时,我们遇到内存泄漏,并且无法完全找到问题.

使用Xcode Instruments,我们可以看到问题很可能发生在框架处理RCTSRWebSocket.m中的二进制消息的方式中,或者稍后可能在RCTWebSocketModule.m的调用树中处理

任何具有Object-C技能的人都能够看到为什么某些内存(可能是对收到的消息进行了分配)没有被正确发布?

链接到Github问题

内存使用情况

调试信息

呼叫树

Ste*_*sen 2

问题终于可以得到解决了。在深入研究 WebSocket 的实现,尤其是 Blob 后,我发现只要不直接关闭,所有 Blob 都会保留在内存中。

这意味着在处理完接收到的数据后,您应该像这样关闭 Blob:

ws.onmessage = function (e) {
  // Do whatever with the data through e.data.
  const data = e.data;
  // When you are done with the received data, you must close the Blob:
  e.data.close();
};
Run Code Online (Sandbox Code Playgroud)