在iPad上优化加载许多图像

Jon*_*tan 1 xcode memory-management image ipad ios

我正在开发一个iPad项目,我试图通过切换预渲染图像来模拟3D体的旋转.

在内存管理方面,我不是最敏锐的人,所以我想知道是否有人有关于如何优化这一点的任何提示.

我的解决方案现在看起来像这样:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *myTouch = [[event allTouches] anyObject];
CGPoint location = [myTouch locationInView:self.view];
int pictureIndex;
//Rough mapping of image to point on screen
if (location.x <= 384 ) {
    pictureIndex = (384 - location.x)/(768/rotatingPictures)+1;
}
else {
    pictureIndex = rotatingPictures - (location.x-384)/(768/rotatingPictures)+1;
}
[theImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.png", pictureIndex]]];
Run Code Online (Sandbox Code Playgroud)

}

以这种方式加载图像是否有效?将图像首先加载到数组或类似的东西会更好吗?

我希望一次加载所有加载时间而不是旋转时加载.

Fat*_*tie 8

第一个关键信息是imageNamed无望!众所周知,它是一只狗.这既不是一件事,也不是另一件事; 它不能很好地缓存,并且往往会占用太多的内存.(Google上有100篇文章.)所以,那就是了.

您必须准确地告诉我们您拥有的图像数量,以及每个图像的确切大小(KB或MB).

只有这样才能决定成功的策略.

要从一个大图像交换到另一个"正确",如果你一遍又一遍地交换巨大的图像,如果你不得不担心内存,你就这样做了.

[hugeImage.image release];
hugeImage.image = [[UIImage alloc] initWithContentsOfFile:
           [[NSBundle mainBundle]
           pathForResource:@"bodyPart"
           ofType:@"png"]];
Run Code Online (Sandbox Code Playgroud)

这将正确摆脱以前的图像,并引入下一个图像.永远,永远使用imageNamed - 它专门设计用于小型(即图标大小)界面使用(即按钮,图标等)图像.

然而,在我们知道图像的精确数量和精确尺寸之前,没有人可以帮助您,实际上每秒或每分钟您想要交换图像的频率.希望能帮助到你!

-----你继续说...

"89.png图片大小从大约70 K到100 K"

好消息,你不会任何问题.您可以轻松加载这些,甚至可以实时快速地制作20 - 30 fps的动画.

简单地完成我每次从一个交换到另一个之后我说的话,你就完成了.

(对于记录,请记住在初始化时首先加载一个,以便上面的代码片段在使用它的"第一次"时正常工作,如果可能的话,在完成后释放最后一个.)干杯.