我有一个独特的问题CoreGraphics
/ CoreAnimation
iPhone上.为了更好地解释问题是如何表现出来的,我将引导您完成当前的设置,并在适当的情况下使用代码进行说明.
我想画一堆预载图片的UIView
的CALayer
,但每当图像显示,应用程序的内存使用率峰值和内存不回收每当图像变化.
图像的预加载是通过读取它们UIImage
的设施,将它们渲染到位图上下文并从中提取CGImageRef
出来的.这样做的目的是对图像进行解压缩和缩放,以便在每次绘制时都不会发生这些操作.关于此事的Apple Q&A中也可以找到类似的建议(CGContextDrawImage
如果您感到好奇,请搜索性能).上下文设置为每个组件8位和预乘alpha.
在将图像解压缩成位图之后,它们被存储在a中NSArray
并且稍后被分配(不保留)到UIView
执行绘图的自定义子类.我已经尝试了各种方法来实际绘制图像,到目前为止,最快的方法是直接设置视图的CALayer
contents
属性.其他方法例如drawLayer:inContext:
并且drawRect:
对帧速率有不同的影响,但它们都表现出相同的记忆行为.
问题是......在contents
属性改变之后,我看到Instruments中的内存出现峰值,即使图像不再显示,内存也不会下降.对象分配保持不变,所以我唯一的猜测CoreAnimation
是创建一些隐式缓存来加速绘图.然而,正如我所说的那样,缓存并没有在它应该发布的情况下释放,而逐渐的构建只会在运行几分钟后导致崩溃.
该contents
属性保留了该对象,我没有明确释放它,因为我希望原始图像在应用程序执行期间保留在内存中; 最重要的是,高保留计数不能解释我看到的内存峰值.
在检查堆栈时,我看到它CoreAnimation
会调用诸如此类的函数CA::Render::copy_image
,这使我相信它会将图层的内容复制到某个无法触及的位置.我想这是有正当理由的,但不知道如何以及何时清除它目前是一个停止显示的错误.
任何对CA有错综复杂知识的人都可以向我解释我是否做错了什么以及如何解决这个问题.
谢谢.
我怎样才能退出iPhone4应用程序?当我使用exit(0)时,应用程序进入后台.我想退出应用程序,而不是将其发送到后台.