在iPad上优化加载许多图像
我正在开发一个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]]];
}
以这种方式加载图像是否有效? 将图像首先加载到数组或类似的东西会更好吗?
我希望一次加载所有加载时间而不是旋转时加载。
第一个关键信息是imageNamed无望 ! 众所周知,它是一只狗。 这既不是一件事,也不是另一件事; 它不能很好地缓存,并且往往会占用太多的内存。 (Google上有100篇关于此的文章。) 所以,那就是了 。
您必须准确地告诉我们您有多少图像,以及每个图像的确切大小(KB或MB)。
只有这样才能决定成功的策略。
要从一个大图像交换到另一个“正确”,如果你一遍又一遍地交换巨大的图像,如果你不得不担心内存,你就这样做 。
[hugeImage.image release]; hugeImage.image = [[UIImage alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"bodyPart" ofType:@"png"]];
这将正确摆脱以前的图像,并引入下一个图像。 永远,永远使用imageNamed – 它专门设计用于小型(即图标大小)界面使用(即按钮,图标等)图像。
然而,在我们知道图像的精确数量和精确尺寸之前,没有人可以帮助您,实际上每秒或每分钟您想要交换图像的频率。 希望能帮助到你!
—–你继续说…
“89.png图片大小从大约70 K到100 K”
好消息,你没有任何问题 。 您可以轻松加载这些,甚至可以实时快速地制作20 – 30 fps的动画。
简单地完成我每次从一个交换到另一个之后我说的话,你就完成了。
(对于记录,请记住在初始化时首先加载一个,以便上面的代码片段在使用它的“第一次”时正常工作,如果可能的话,在完成后释放最后一个。)干杯。