我正在制作一个iOS应用程序-本质上是通过TCP逐帧接收JPEG图像。
应用程序的另一部分有一个ID SomeCol
1 Dog
2 Cat
3 Monkey
,需要从这些框架中动态设置背景。
我的伪代码如下:
ARSCNView
就是这样。无论哪种方式,此循环都会导致内存泄漏。使用while(phase == 1) {
let bytes = try tcpSocket.read(into: &jpegData)
sceneView.scene.background.contents = UIImage(data: jpegData)
// or the other way
let bgempty = backgroundImage == nil
backgroundImage = UIImage(data: jpegData)
if(bgempty) {
sceneView.scene.background.contents = backgroundImage
}
}
如何为CGImage
分配不断变化的背景,从而避免内存泄漏?
答案 0 :(得分:0)
一种解决方案是使用autoreleasepool
块。这样可以确保内存占用量保持最小。您使用的循环会占用大量设备内存,为优化此代码,您可以添加自动释放池,如下所示:
while(phase == 1) {
autoreleasepool {
let bytes = try tcpSocket.read(into: &jpegData)
sceneView.scene.background.contents = UIImage(data: jpegData)
// or the other way
let bgempty = backgroundImage == nil
backgroundImage = UIImage(data: jpegData)
if(bgempty) {
sceneView.scene.background.contents = backgroundImage
}
}
}