Iphone UIImage性能解决方案

Iphone UIImage性能解决方案,iphone,Iphone,这个问题有没有更优雅的解决方案 我有大约70个.png图像,我想在按下按钮时加载并从数组中随机抽取。(一次屏幕上最多可显示50幅图像,每幅图像大小为40-68kbs,尺寸为150X215,显然前景图像后面有时会有重叠图像和覆盖图像)我是否应该使用以下示例来实现这一点 例如: -(void)viewDidLoad { UIImage *dogImage = [UIImage imageNamed: @"dog.png"]; UIImage *catImage = [UIImage

这个问题有没有更优雅的解决方案

我有大约70个.png图像,我想在按下按钮时加载并从数组中随机抽取。(一次屏幕上最多可显示50幅图像,每幅图像大小为40-68kbs,尺寸为150X215,显然前景图像后面有时会有重叠图像和覆盖图像)我是否应该使用以下示例来实现这一点

例如:

-(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
一起使用的示例?