我使用以下语句使用图像填充当前图形上下文中的颜色:
CGContextSetFillColorWithColor(aContext,[[UIColor colorWithPatternImage:[UIImage imageNamed:kRunnerGradientedBackgroundImage]] CGColor]);
这句话突然使我的内存使用量从1.3 MB增加到5.6 MB。如果我释放UIImage
对象然后它下降到1.3 MB但由于图像对象的保留计数已经为0,我不能这样做。
有关如何控制突然内存峰值的任何建议吗?
答案 0 :(得分:1)
必须将模式数据加载到内存中才能使用它。没有得到'那个。你可以尝试一个较小的模式。当您使用图案绘制完成后,还可以尝试将背景的填充颜色设置为简单的纯色。
增加:当您在其中绘制图案或图像时,图形上下文本身也可能变得更大(以保持图案图像所需的所有像素)。尝试删除并释放包含图形上下文的UIView或CGLayer。
答案 1 :(得分:1)
kRunnerGradientedBackgroundImage
有多大,它的格式是什么?如果是PNG,它是否有不必要的alpha通道?正如hotpaw2所提到的,模式图像应该尽可能小,然后UIKit将为您处理平铺或拉伸。你能用PNGCRUSH来缩小尺寸吗?
另一种方法是使用CGGradient
或CAGradientLayer
通过CoreGraphics / CoreAnimation以编程方式创建渐变。
请参阅:
答案 2 :(得分:0)
我删除了图片,现在使用代码绘制渐变。这使内存峰值减少了4.5 MB。