文章目录
当应用程序在内存占有率很高的情况下,系统就会抛出一个内存警告,如果不进行妥当的处理的话,很可能应用程序会被系统直接杀掉,即使不被杀死,不处理的话,内存占有率高也会影响应用的流畅程度。核心就是释放掉暂时不需要的内存,保证程序的流畅度,以及不被系统杀掉。
当有内存警告的时候就会自动调用:
- (void)didReceiveMemoryWarning{
[super didReceiveMemoryWarning];
}
模拟内存警告:
释放掉没显示的视图:
一个变量记录当前显示的是哪个视图:
@property (nonatomic,weak)UIViewController *currentShowController;
在点击选择视图控制器的地方给他赋值:
- (void)tabBar:(CustomTabBar *)tabBar itemSelectedAtIndex:(NSUInteger)index{
//UIView *view=self.viewArray[index];
//[self.view bringSubviewToFront:view];
if(index==0){
[self.view bringSubviewToFront:self.ocController.view];
_currentShowController=_cController;
}
else if(index==1){
[self.view bringSubviewToFront:self.cController.view];
_currentShowController=_cController;
}
else{
[self.view bringSubviewToFront:self.javaController.view];
_currentShowController=_javaController;
}
[self.view bringSubviewToFront:tabBar];
}
移除操作:
现将视图控制器从父视图控制器中移除,再将视图从父视图中移除,因为是强引用,所以要将对象设置成nil
[self.javaController removeFromParentViewController];
[self.javaController.view removeFromSuperview];
[self setJavaController:nil];
- (void)didReceiveMemoryWarning{
[super didReceiveMemoryWarning];
if(self.currentShowController==self.ocController){
[self.javaController removeFromParentViewController];
[self.javaController.view removeFromSuperview];
[self setJavaController:nil];
[self.cController removeFromParentViewController];
[self.cController.view removeFromSuperview];
[self setCController:nil];
}
else if(self.currentShowController==self.javaController){
[self.ocController removeFromParentViewController];
[self.ocController.view removeFromSuperview];
[self setOcController:nil];
[self.cController removeFromParentViewController];
[self.cController.view removeFromSuperview];
[self setCController:nil];
}
else {
[self.ocController removeFromParentViewController];
[self.ocController.view removeFromSuperview];
[self setOcController:nil];
[self.javaController removeFromParentViewController];
[self.javaController.view removeFromSuperview];
[self setJavaController:nil];
}
}
可以在释放的视图控制器里重写dealloc方法:
- (void)dealloc
{
NSLog(@"OCViewController被释放");
}