SKTexture textureWithImageNamed使用了太多内存

时间:2014-06-13 15:48:14

标签: cocoa memory memory-leaks sprite-kit sktexture

我正在尝试使用spriteKit制作一种360°可视化工具。在我的场景中,我创建了一个

spriteArray = [[NSMutableArray alloc] init];

我正以这种方式填写:

for ( int j=0; j<stepsY+1; j++)
{
    NSMutableArray * innerArray = [[NSMutableArray alloc] init];

    for ( int i=0; i<stepsX+1; i++) {
        SKTexture *t = [SKTexture textureWithImageNamed:[NSString stringWithFormat:@"img_0_%d_%d.jpg", (stepsY-j),(stepsX-i)]];
        [innerArray addObject:t];
    }

    [spriteArray addObject:innerArray];
}
例如,我将有一个二维数组4x23; y轴为四步,x轴为23步;上

- (void) touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event

我正在使用

[sprite setTexture:....];

将正确的纹理设置为可视化;

当我在模拟器上运行时,它工作得很好但是当我尝试使用真实设备时,当我填充spriteArray时,应用程序崩溃并且xcode告诉我“由于内存错误而终止”; 所以我在模拟器中检查了ram的使用,我认识到这是巨大的... 1.5gb;我的纹理是1220x1220 jpg,每个50kb左右....所以似乎某处有一种内存泄漏。

有人可以帮帮我吗?

由于

1 个答案:

答案 0 :(得分:1)

不是内存泄漏,只是一个误解:文件大小无所事事纹理内存使用。

1220x1220达到1,488,400像素。默认情况下,纹理使用每种颜色32位(4个字节)。这为每个纹理提供了大约5.7 MB的内存使用量。

4次23是92.

92次5.7 MB为您提供超过500兆字节的内存使用量。

此外,如果Sprite Kit内部仅使用尺寸为2的倍数的纹理,则实际纹理大小为2048x2048(每个纹理16 MB),总纹理内存使用量几乎为1.5 GB。

嗯,那是你的问题。 :)