Iphone UIImage性能解决方案
这个问题有没有更优雅的解决方案 我有大约70个.png图像,我想在按下按钮时加载并从数组中随机抽取。(一次屏幕上最多可显示50幅图像,每幅图像大小为40-68kbs,尺寸为150X215,显然前景图像后面有时会有重叠图像和覆盖图像)我是否应该使用以下示例来实现这一点 例如:Iphone UIImage性能解决方案,iphone,Iphone,这个问题有没有更优雅的解决方案 我有大约70个.png图像,我想在按下按钮时加载并从数组中随机抽取。(一次屏幕上最多可显示50幅图像,每幅图像大小为40-68kbs,尺寸为150X215,显然前景图像后面有时会有重叠图像和覆盖图像)我是否应该使用以下示例来实现这一点 例如: -(void)viewDidLoad { UIImage *dogImage = [UIImage imageNamed: @"dog.png"]; UIImage *catImage = [UIImage
-(void)viewDidLoad {
UIImage *dogImage = [UIImage imageNamed: @"dog.png"];
UIImage *catImage = [UIImage imageNamed: @"cat.png"];
// And so on 68 more times followed by....
for (int i = 1; i <= 70; i++) {
UIImageView *dogView = [[UIImageView alloc]initWithImage:dogImage];
UIImageView *catView = [[UIImageView alloc]initWithImage:catImage];
// And so on 68 more times followed by....
NSArray *animalArray = [[NSArray alloc] initWithObjects: dogView, catView, nil];
// And so on 68 more times ending the array with ,nil
// other code and and release calls, etc...
}
}
-(void)viewDidLoad{
UIImage*dogImage=[UIImage ImageName:@“dog.png”];
UIImage*catImage=[UIImage IMAGENAME:@“cat.png”];
//以此类推,68次之后是。。。。
对于(int i=1;iHmmm)来说,这大约是3.8MB的图像。当用户坐在那里等待视图出现时,加载可能需要一些时间。试试看需要多长时间
如果在按下按钮之前不需要图像,则加载它!如果一次只使用其中一个图像,则加载70个图像将浪费大量时间
我建议您不要尝试在ViewDidLoad中加载所有这些。如果必须同时将它们全部加载到数组中,请将图像加载到单独线程上的数组中,并在加载每个图像时将其添加到数组中。此外,您需要记住,您引用的图像大小是其压缩大小。一旦该图像被加载,请立即将其加载到数组中在视图中使用时,它将被解压缩以绘制到图形上下文。70个图像的未压缩大小将比几兆字节多得多
如果您同时加载所有这些文件,则可能会导致应用程序崩溃,并出现内存不足错误
我建议只在数组中存储图像文件名,并且只在实际需要时加载图像
另外,UIImage
加载图像数据的方式也有一些不同,这取决于您使用的加载图像的方法。我对这种情况的记忆没有足够的信心来记录确切的差异。基本思想是imageNamed:
将为您加载和缓存图像,而(我认为)initWithContentsOfFile将按需加载图像数据,在需要图像的最后一分钟之前为您节省一些内存。一次绘制这么多图像,现在是查看DrawRect的时候了
我想你可以使用UIImage的imageNamed方法在你按下按钮时加载图像。这会进行一些缓存,这样重复的图像会加载得更快,从而节省内存
<> P>然后将它们画到屏幕上,你想使用一个视图并使用Qualth2D绘图方法把它们放在屏幕上。让它们都作为单独的IIVIEVIEWS,如果你正在做任何滚动或动画,就会咀嚼更多的内存,并使它们慢下来。 < P>以及按需加载图像,你也可以考虑存储它们。使用PowerVR纹理压缩。您不需要使用OpenGL来使用此压缩模式-iPhone上的所有图形API都已设置为处理此模式。光盘上的文件将比PNG压缩的文件大,但其美妙之处在于它们不需要在内存中反压缩-压缩后的图像数据直接呈现。大小为150x215的70个图像将使用超过9MB的RAM。一旦加载,它们将不再被压缩,并且每像素将使用4个字节。您还可以在等待加载真实图像时放置占位符图像。显示占位符框比让用户等待加载视图更好。“您不需要使用OpenGL来使用此压缩模式-iPhone上的所有图形API都已设置为可以处理此压缩模式。”您确定这一点吗?请给出一个将.pvr文件与UIImageView
一起使用的示例?