创建时,使用CIImage
内存时,内存急剧跳升50MB-60MB CIIMage
,然后在尝试创建UIImage
结果时程序崩溃。
CIImage *image = [CIImage imageWithData:data]; // +50MB memory increase (data is jpeg data)
它不会一直发生,但是对于较大的图像(3264x2448)以及在应用程序处于后台模式时,它的发生频率更高。
导致频繁崩溃。有任何想法吗?
核心映像对映像大小有严格的限制。iOS 8在很大程度上取消了这些限制;如果您使用的是较早的系统,请不要这样做(即,将自己局限于较小的图像)。在iOS 7及更低版本中,GPU仅可用于尺寸小于4K的图像,这确实很小。
而且,在后台使用核心图像受到严格限制,因为毕竟,当某些前景应用正在使用它时,您的应用又怎敢尝试从后台进入GPU(一个小而忙碌的地方)?您被迫使用CPU(尽管在某种程度上,iOS 8中取消了此限制)。
因此,您的问题很可能部分与内存有关(试图将核心映像用于太大的映像),而部分与线程相关(如果您使用的是CPU,则需要确保您在后台线程,因为这将花费很长的时间,如果挂断主线程,看门狗将杀死您。
要考虑的另一件事是您如何自己管理内存。您没有显示任何相关代码,所以很难说,但是可能是因为您挂在不需要的数据上。您应该显示代码,理想情况下,您应该使用Instruments分析您的应用程序,以便准确知道问题出在哪里。
例如,您引用的唯一代码行是
CIImage *image = [CIImage imageWithData:data]
这表明您正在将数据保存在内存中。那完全没有必要。如果玩法正确,则可以直接从磁盘上的映像文件获取CIImage,并直接在磁盘上创建输出,而不会占用任何额外的内存。如果仅由于形成CIImage而产生大量内存,则可能做错了(CIImage只是一个指针,而不是位图)。唯一需要存储空间的时刻就是最终渲染,即形成位图的时间,您可以使用ImageIO将其导出到磁盘,而无需将其保存在内存中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句