使用UIImage进行CGContextSetFillColorWithColor时突然出现内存峰值

时间:2011-10-31 20:17:58

标签: iphone ios cocoa-touch uikit core-graphics

我使用以下语句使用图像填充当前图形上下文中的颜色:

CGContextSetFillColorWithColor(aContext,[[UIColor colorWithPatternImage:[UIImage imageNamed:kRunnerGradientedBackgroundImage]] CGColor]);

这句话突然使我的内存使用量从1.3 MB增加到5.6 MB。如果我释放UIImage对象然后它下降到1.3 MB但由于图像对象的保留计数已经为0,我不能这样做。

有关如何控制突然内存峰值的任何建议吗?

3 个答案:

答案 0 :(得分:1)

必须将模式数据加载到内存中才能使用它。没有得到'那个。你可以尝试一个较小的模式。当您使用图案绘制完成后,还可以尝试将背景的填充颜色设置为简单的纯色。

增加:当您在其中绘制图案或图像时,图形上下文本身也可能变得更大(以保持图案图像所需的所有像素)。尝试删除并释放包含图形上下文的UIView或CGLayer。

答案 1 :(得分:1)

kRunnerGradientedBackgroundImage有多大,它的格式是什么?如果是PNG,它是否有不必要的alpha通道?正如hotpaw2所提到的,模式图像应该尽可能小,然后UIKit将为您处理平铺或拉伸。你能用PNGCRUSH来缩小尺寸吗?

另一种方法是使用CGGradientCAGradientLayer通过CoreGraphics / CoreAnimation以编程方式创建渐变。

请参阅:

答案 2 :(得分:0)

我删除了图片,现在使用代码绘制渐变。这使内存峰值减少了4.5 MB。