iOS 7 App因内存压力而终止

我有一个ipad应用程序的两个视图,它使用大型UIScrollowView,这似乎导致内存问题。 当内存达到250MB左右时,我得到了第一个内存警告。 使用Apple Instruments时,这里是All Heap中最大的:

VM:ImageIO_JPEG_Data,大小32.13MB VM:CoreAnimation,大小32.13MB VM:ImageIO_JPEG_Data,大小26.64MB …

我在滚动视图中有很多图像 – 它们都被加载到故事板中,我想知道如果我减小图像的大小或分辨率它会解决问题吗?

您可以设置一个系统来删除/加载滚动视图中某些点的某些图像,因此当用户即将看到它们时,应用程序只将它们存储在内存中。

因为你说它相当大,在scrollview的scroll方法中,设置变量以了解scrollview所处的位置(例如:中途向下,10%滚动等)。 如果用户坐在滚动视图的末尾(即:无法向下滚动(100%)),那么他们并没有完全看到视图顶部的图像。 然后,您可以将这些图像设置为零,以便应用程序可以重用该内存。 当用户滚动并且滚动视图接近某个百分比时,您可以加载用户即将看到的图像,并且用户远离的图像为零(这可能会导致几秒钟的’空白’用户正在疯狂地滚动浏览你的应用程序,但这没关系,因为所有加载的图像都不会超过几秒钟。

因为这些图像被加载到故事板中,我假设您正在通过UIImageView加载它们。 只需给每个sockets一个sockets(按住控件+单击并将其拖动到您class级的.h文件并创建一个IBOutlet),然后当您有用户向下滚动视图的百分比时,您可以知道’好吧,用户是在50%所以我可以摆脱0-20%和80-100%的scrollview’的图像,你这样做:

//^Get scrollview scrolled percentage //^find out where the user is, get a list of UIImageViews that are not visible on the screen _yourUIImageView.image = nil //get rid of the image, clear memory up //then when you need to add it again, assign an image to the UIImageview 

希望我帮忙。

最大值不在Storyboard中加载图像,而是可以通过编码来完成,如下所示

 NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; NSString *pathForImageFile1 = [resourcePath stringByAppendingPathComponent:@"filename.png"]; UIImage * image = [[UIImage alloc] initWithContentsOfFile:pathForImageFile1]; imageView.image = image; image = nil; 

希望能帮助到你!