在我的应用程序中,我将几个图像加载到UIScrollView上,并使用Core Graphics例程突出显示滚动视图的一部分。我在例程中使用了CGImageRelease和CGContextRelease来管理内存。
当我使用乐器(分配)运行应用程序时,我发现每次刷新scrollView时内存消耗都会不断增加。这一点导致应用变得非常慢。
为了加载不同的图像,我使用UIImage ImageNamed方法,我遇到了一些帖子,表明这不是一个好主意,因为该方法会导致自动释放的图像,从而产生内存问题。我想知道我是否正在寻找错误的正确位置。什么可能是寻找这种不寻常的内存消耗的地方?
另外,使用Instruments的分配,我可以看到内存的增加,是否有可能确定这些分配发生的代码?
提前感谢您的帮助!
最佳DKV
答案 0 :(得分:0)
为了加载不同的图像,我使用UIImage ImageNamed方法,我发现一些帖子表明这不是一个好主意,因为该方法会导致自动释放图像,从而产生内存问题。
不,那不是问题。任何不让您自己调用alloc
,init
[WithSomethingOrOther:
]和release
的内容都会让图片自动释放。
问题是imageNamed:
在将图像交给您后继续拥有该图像。您从imageNamed:
获取的每张图片都会保留在该缓存中,并与该名称永久关联。它不仅仅是“加载此图像”方法;它是一个“加载这个图像并永远保持活着*”的方法。
*“永远”的意思是“直到我的过程结束”。
我想知道我是否正在寻找错误的正确位置。什么可能是寻找这种不寻常的内存消耗的地方?
在仪器中。它会告诉您正在创建的每种对象的数量,以及每种类型的总内存对象占用多少,您可以对该列表进行排序以确定占用内存的内容。然后,您可以深入到每个类并进入每个对象,以确定在您需要它们之后保持对象的活动。