2011-01-30 57 views
0

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

当我使用仪器(分配)运行应用程序时,我发现随着scrollView的每次滑动,内存消耗都会持续上升。这一点导致应用程序变得非常慢。

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

此外,使用Instruments的分配,我可以看到内存的增加,是否可以将代码指向哪些分配发生的位置?

在此先感谢您的帮助!

最佳 DKV

回答

0

对于加载不同的图像,我用的UIImage ImageNamed方法,我也接触过一些帖子,表明这是不是因为在自动释放图像的方法结果一个好主意,它创建的内存问题。

不,这不是问题。任何不涉及你自己打电话allocinit [WithSomethingOrOther:]和release自己将获得图像autoreleased。

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

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

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

仪器中。它会告诉你究竟有多少种你正在创建的对象,以及每种类型的总内存对象占用了多少,并且你可以对该列表进行排序以确定什么是内存消耗。然后,您可以深入到每个类和每个对象中,以确定在需要它们之后保持对象的活性。

+0

请问你怎么知道“这是一个永远活着的方法”?我可以得到正式的参考或声明吗? – 2014-10-28 04:55:14

相关问题