我在UIScrollView中实现了大量的视图。由于我的应用程序的性质,我无法使用表格视图。
基本上我在UIScrollView中有一组'块',它们是视图控制器本身。一切正常,但内存在非常大的页面上是一个问题。我已经成功实现了子视图的动态添加(当它们出现在屏幕上时,它们被放置并添加到父视图中)。块本身是一次性设置和创建的,但是它们的实际视图(即block.view)在它们出现在屏幕上之前不会被添加到大容器中。这很好用,但我需要一种方法,一旦它们离开屏幕就从内存中删除它们。 removeFromSuperView确实使它们消失,但不会减少内存使用量。
如果我在addSubview之后立即删除了SuperSuperView,则不会显示该块并且内存不会上升。如果我在绘制周期后删除了SuperSuperview,那么即使你再也看不到视图,内存也会在绘图中上升而不会再下降。这就像在我实际释放整个视图之前缓存视图一样。这没有意义,因为它在绘制之前没有使用太多内存,即使它已经被创建了。
我无法释放视图,因为它属于我的块(viewcontroller),它包含许多其他(例如布局)信息。我只需要恢复记忆。我知道在绘制周期之前将视图保留在内存中不会导致内存上升,因此我不需要摆脱它。
例如,如果我保留而不是addSubview,我知道我的视图仍然存在,但它并没有使用几乎相同的内存。
我试过在vc上调用内存警告
答案 0 :(得分:0)
我相信UIViews在显示之前并没有真正为自己分配图层。这就是为什么在将它添加到超级视图之前你没有看到内存使用率上升的原因。
您应该做的是在需要之前不创建视图,并在从滚动视图中删除视图后立即释放视图。这样,该层将被解除分配。
基本上,您需要实现loadView
,以便在通过view
属性访问视图时创建(并重新创建)视图。