iOS内存警告相关总结

1.当应用程序收到内存警告时,AppDelegate中的- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;先收到通知进行执行,然后是按栈中存放的顺序的控制器中的- (void)didReceiveMemoryWarning;收到通知进行执行.

2.如果当前视图控制器正在屏幕上显示,如果在- (void)didReceiveMemoryWarning;方法中执行self.view = nil; 则会导致白屏现象.

3.如果在栈顶存放的控制器的- (void)didReceiveMemoryWarning;方法中执行self.view = nil; 则该视图控制器的view将会被销毁清空.如果紧接着执行self.view进行打印视图,就相当于调用了当前控制器属性view的get方法,这时候系统就会找不到view就会重新执行loadView方法加载创建一个view给当前的视图控制器,如果是storyboard或者xib创建的view就从storyboard或者xib中加载view.

4.如果在3的基础上只执行self.view = nil;不调用self.view,则从后一个视图控制器返回根控制器的时候,发现根控制器的view不存在,就会重新执行loadView方法加载创建一个view给当前的视图控制器,如果是storyboard或者xib创建的view就从storyboard或者xib中加载view.我们就会看到和原来一样的根控制器页面.

5.在iOS6以后,如果不手动设置self.view = nil,系统是不会回收控制器的view的,除非达到一定条件或者系统关闭了这个应用才会回收内存资源.

6.平时在开发过程中不需要对控制器的- (void)didReceiveMemoryWarning;方法进行任何操作,基本不会出现内存警告,如果真的出现内存警告就说明代码写的有问题,内存没有管理好,需要检查代码.

7.可以写两个控制器实现相关的方法,来回跳转并模拟内存警告,可以看到相关方法的调用和执行情况.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,439评论 30 472
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,378评论 1 14
  • 代码创建UIWindow对象 Xcode7之后使用代码创建UIWindow对象: //创建UIWindow对象 s...
    云之君兮鹏阅读 5,245评论 0 2
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 8,986评论 2 4
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 4,446评论 0 1

友情链接更多精彩内容