0

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

当我使用工具(分配)运行应用程序时,我发现每次滑动滚动视图时内存消耗都会不断增加。这在某一时刻导致应用程序变得非常缓慢。

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

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

在此先感谢您的帮助!

最佳 DKV

4

1 回答 1

0

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

不,这不是问题。任何不涉及您调用allocinit[ WithSomethingOrOther:] 和您release自己的内容都会自动发布图像。

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

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

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

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

于 2011-01-31T01:03:56.670 回答