0

我正在加载一个 2X2 集合视图,它有多个单元格,每个单元格都有 imageview。但是当我关闭这个控制器时,常驻内存和脏内存不断增加。

我的控制器中有多个视图,集合视图就是其中之一,我使用 addsubview 和 removefromsuperview 在控制器中显示不同的视图。在我关闭控制器之前,我从控制器的子视图中删除了所有子视图,包括集合视图。

但这不会释放常驻内存,并且在超过 500MB 后,应用程序会在引发内存警告后崩溃。这是我在dismissviewcontroller之前删除子视图的代码-

-(void)removeSubViewsOfView:(UIView *)view{        
    NSArray *viewsToRemove = [view subviews];
    for (int i = 0; i<[viewsToRemove count]; i++) {
        UIView *v = [viewsToRemove objectAtIndex:i];

            [v removeFromSuperview];
            v=nil;
    }
}

我也在使用ARC。

4

1 回答 1

0

一些建议:

  1. 确保您将所有设置IBOutletsnil您的视图-dealloc方法

  2. 如果您正在使用视图控制器包含,请调用-removeFromParentViewController

    - (void)removeSubViewsOfView:(UIView *)view{        
        NSArray *viewsToRemove = [view subviews];
        for (int i = 0; i<[viewsToRemove count]; i++) {
            UIView *v = [viewsToRemove objectAtIndex:i];
    
            [v removeFromSuperview];
            NSViewController* vController = nil;//retrieve your view controller
            [vController removeFromParentViewController];
            v=nil;
        }
    }
    
  3. 它不会产生脏内存,但如果你保持strong对象之间的相互引用,它可能会泄漏对象,也就是。A保留B,B保留A

希望能帮助到你 :)

于 2013-08-20T09:17:05.093 回答