在我的应用程序中,我正在将几个图像加载到UIScrollView上,并使用核心图形例程突出显示滚动视图的一部分。在例程中,我使用了CGImageRelease和CGContextRelease来管理内存。
当我使用instruments (allocation)运行应用程序时,我发现每次滑动scrollView时,内存消耗都在不断增加。这在某种程度上导致应用程序变得非常慢。
对于加载不同的图像,我使用UIImage ImageNamed方法,我遇到一些帖子表明这不是一个好主意,因为该方法会导致自动释放的图像,从而产生内存问题。我想知道我是否在寻找错误的正确位置。在什么地方可以找到这种不寻常的内存消耗?
另外,使用Instruments的分配,我可以看到内存的增加,是否有可能指出这些分配发生的代码?
提前感谢您的帮助!
最佳DKV
发布于 2011-01-31 09:03:57
为了加载不同的图像,我使用UIImage ImageNamed方法,我遇到一些帖子表明这不是一个好主意,因为该方法会导致自动释放的图像,从而产生内存问题。
不,这不是问题所在。任何不涉及你自己调用alloc、initWithSomethingOrOther:和release的行为都会导致图片自动发布。
问题是,在imageNamed:将镜像交给您之后,它仍然拥有该镜像。您从imageNamed:获得的每个图像都会保存在该缓存中,并与该名称永久关联。它不仅仅是一个“加载此图像”方法;它还是一个“加载此图像并使其永远存在*”方法。
*其中“永远”表示“直到我的进程结束”。
我想知道我是否找对了错误的位置。在什么地方可以找到这种不寻常的内存消耗?
在仪器中。它将准确地告诉您正在创建的每种对象的数量,以及每种对象占用的内存总量,您可以对该列表进行排序,以确定哪些对象正在占用内存。然后,您可以深入到每个类和每个对象,以确定是什么使对象在需要时保持活动状态。
https://stackoverflow.com/questions/4844922
复制相似问题