-1

我正在尝试使用 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 轴有 4 步,x 轴有 23 步;上

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

我在用着

[sprite setTexture:....];

设置正确的纹理以进行可视化;

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

有人可以帮我吗?

谢谢

4

1 回答 1

1

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

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

23的4乘以92。

92 乘以 5.7 MB 为您提供超过 500 MB 的内存使用量。

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

嗯,有你的问题。:)

于 2014-06-13T16:06:43.207 回答