UIImage ImageNamed方法

时间:2011-01-30 19:20:16

标签: uiscrollview uiimage core-graphics instruments imagenamed

在我的应用程序中,我将几个图像加载到UIScrollView上,并使用Core Graphics例程突出显示滚动视图的一部分。我在例程中使用了CGImageRelease和CGContextRelease来管理内存。

当我使用乐器(分配)运行应用程序时,我发现每次刷新scrollView时内存消耗都会不断增加。这一点导致应用变得非常慢。

为了加载不同的图像,我使用UIImage ImageNamed方法,我遇到了一些帖子,表明这不是一个好主意,因为该方法会导致自动释放的图像,从而产生内存问题。我想知道我是否正在寻找错误的正确位置。什么可能是寻找这种不寻常的内存消耗的地方?

另外,使用Instruments的分配,我可以看到内存的增加,是否有可能确定这些分配发生的代码?

提前感谢您的帮助!

最佳

DKV

1 个答案:

答案 0 :(得分:0)

  

为了加载不同的图像,我使用UIImage ImageNamed方法,我发现一些帖子表明这不是一个好主意,因为该方法会导致自动释放图像,从而产生内存问题。

不,那不是问题。任何不让您自己调用allocinit [WithSomethingOrOther:]和release的内容都会让图片自动释放。

问题是imageNamed:在将图像交给您后继续拥有该图像。您从imageNamed:获取的每张图片都会保留在该缓存中,并与该名称永久关联。它不仅仅是“加载此图像”方法;它是一个“加载这个图像并永远保持活着*”的方法。

*“永远”的意思是“直到我的过程结束”。

  

我想知道我是否正在寻找错误的正确位置。什么可能是寻找这种不寻常的内存消耗的地方?

在仪器中。它会告诉您正在创建的每种对象的数量,以及每种类型的总内存对象占用多少,您可以对该列表进行排序以确定占用内存的内容。然后,您可以深入到每个类并进入每个对象,以确定在您需要它们之后保持对象的活动。