React Native 中的 iOS websocket 内存问题

标签 ios objective-c react-native websocket

我们在 React Native 中使用 websocket blob 实现时遇到内存泄漏,无法完全定位问题。

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

任何具有 Object-C 技能的人都能够看到为什么某些内存(可能分配给接收到的消息)没有被正确释放?

Link to Github issue

Memory usage

Debug Info

Call tree

最佳答案

问题终于可以解决了。在深入了解 WebSockets 尤其是 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();
};

关于React Native 中的 iOS websocket 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395122/

相关文章:

ios - SpriteKit 内存泄漏?

ios - 检测丢包

ios - 从 iPhone 中的 PrimaryOverlay 动画到 PrimaryHidden 时隐藏 UiSplitView 中的灰色框

ios - 模态视图 Controller 关闭时应用程序崩溃

javascript - 使用react-native通过TCP Socket发送mp3文件

ios - Swift 2 官方指南/文档链接?

ios - 在NSMutable数组上使用sortingUsingDescriptors,NSSortDescriptor和sortDescriptorWithKey方法时引发错误

objective-c - 将数据传输回原始 View

javascript - 如何将 refs 传递到 NavigationBar RouteMapper (React Native) 的变量中?

Android 模拟器不在屏幕上显示谷歌地图