我的应用截屏。我有一个带有滚动视图的主屏幕,可让您循环浏览这些快照。问题是,我拥有的快照越多,视图运行的速度就越慢。在事情严重滞后之前,我可以在scrollview中获得大约15个快照。我正在显示的图像只是实际屏幕截图的1/3。每个屏幕截图都是滚动视图上的UIImageView。有关提高绩效的想法吗?
答案 0 :(得分:5)
你能做的最好的事情是做懒加载。 仅加载该视图上当时可见的图像。 滚动后,旧图像会被释放,新图像会被加载。
加载图片的两种方法:
[UIImage imageNamed:fullFileName] // caches the image
或:
NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
[UIImage imageWithData:imageData];
或者,最后:
[UIImage imageWithContentsOfFile:path] // does not cache the image
哪种解决方案最好取决于您对图像的处理方式。 imageNamed:
方法会对图像进行缓存,但在许多情况下,这会有助于内存使用。例如,如果将图像加载10次以与表视图中的某些文本一起显示,UIImage
将仅在内存中保留该图像的单个表示,而不是分配10个单独的对象。另一方面,如果你有一个非常大的图像并且你没有重新使用它,你可能想要从数据对象加载图像,以确保它在你完成后从内存中删除。
如果你没有任何巨大的图像,我不会担心缓存,只要你使用延迟加载。除非你发现问题,否则我会选择较少的代码行而不是可忽略不计的内存改进。