2009-07-22 60 views
0

我已经在UIScrollView中实现了大量视图。由于我的应用程序的性质,我无法使用表格视图。removeFromSuperView /内存/动态视图切换

基本上我有一个'块'的视图控制器本身,在UIScrollView内的集合。一切正常,但内存是非常大的页面上的问题。我已经成功地实现了动态添加子视图(当它们出现在屏幕上时,它们被放置并添加到父视图中)。这些块本身是一次性设置和创建的,但它们的实际视图(即block.view)不会添加到大容器中,直到它们出现在屏幕上。这很好,但我需要一种方法,一旦他们离开屏幕,从内存中删除视图。 removeFromSuperView确实使它们消失,但不会减少内存使用量。

如果我立即删除FromSuperView,在addSubview之后,块不显示,并且内存不上。如果我在抽奖周期后删除了FromFromSuperview,那么即使您再也看不到视图,该内存会在抽签中上升并且不会回落。这就像视图被缓存直到我实际释放整个视图。这是没有意义的,因为它在绘制之前没有使用太多的内存,即使它已经被创建。

我不能释放视图,因为它属于我的块(viewcontroller),它包含很多其他(例如布局)信息。我只需要回忆回忆。我知道在绘制循环之前将视图保存在内存中不会导致内存上升,因此我不需要去除它。

例如,如果我保留而不是addSubview,我知道我的视图仍然存在,但它并没有使用几乎一样多的内存。

我试图调用存储在VC

回答

0

我认为UIViews是聪明,直到它显示本身没有实际分配层警告。这就是为什么你没有看到内存使用情况,直到你将它添加到超级视图。

您应该做的是在需要之前不要创建视图,并且一旦从滚动视图中删除视图就会释放视图。这样,图层将被释放。

基本上,您需要执行loadView以创建(并重新创建)通过view属性访问的视图。