二、当应用接收到内存警告时应该怎么处理

当收到内存警告的时候,应用程序会将警告一级一级往下传递,传递顺序是UIApplication->UIWindow->rootViewController(如果有子控制器)->childViewControllers。

当控制器接收到警告之后,就会调用didReceiveMemoryWarning方法。一般会在这个方法中做几件事:

1、在iOS6之前的处理方式(见图)

2、在iOS6之后的处理方式如下:

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Add code to clean up any of your own resources that are no longer necessary.

if ([self.view window] == nil)

{

// Add code to preserve data stored in the views that might be

// needed later.

// Add code to clean up other strong references to the view in

// the view hierarchy.

self.view = nil;

}

}

1> 调用父类的didReceiveMemoryWarning来确保父类的行为能够被执行。

2> 清理控制器不再需要的资源

3> 判断控制器的view是不是正在在窗口上显示,如果不是,先保存跟view或子view相关的数据。清空所有子控件的强引用。

4> 最后设置控制器的view为nil。

时间: 2024-08-21 10:39:15

二、当应用接收到内存警告时应该怎么处理的相关文章

iOS当发生内存警告时的一些处理

//释放暂时不使用的内存,共当前程序使用. - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. //当收到内存警告时,移除当前没有在屏幕上显示的视图. //判断是否可以安全的移除视图控制器的view. //判断当前的视图控制器的view是否是屏幕上显示.self.view.window //判断当前视图控制器的vi

【ios】收到系统内存警告时,应如何释放内存

- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; if (_userInfoViewCtl != nil && [_userInfoViewCtl isViewLoaded]) { if (_userInfoViewCtl.view.window == nil) { self.userInfoViewCtl = nil; } } } -(KEUserInfoViewController *) userInf

ios6前后分别如何处理内存警告

这里有一篇文章,很详细地说明了ios6前后是如何处理内存警告的: 来自唐巧的技术博客:http://blog.devtang.com/blog/2013/05/18/goodbye-viewdidunload/ 1.ios4和ios5中,当收到内存警告时,系统会自动调用当前没有在界面上的VC的viewDidUnload方法. 在viewDidUnload写下如下代码: if([self isViewLoaded] && ![[self view] window]) { [self setV

UIViewController内存警告管理

ios3.0 ios5.0 步骤 应用收到内存警告. 每个ViewController调用自己的didReceiveMemoryWarning方法. 判断view是否当前显示在屏幕上,如果是当前页,则流程结束. ViewController调用viewWillUnload方法. ViewController设置它的View为空.(清view) ViewController调用viewDidUnload方法. ios6.0及以后: 取消了viewdidunload和viewwilldidunloa

UI第三讲.自定义视图 视图控制器指定自定义view 检测屏幕旋转 处理内存警告 容器视图控制器

一.自定义视图 (自定义label-textField视图) 目的:为了进一步优化登录界面,提高代码的精简程度和复用性,可移植性,从而需要在原有视图控件的基础之上自由组合成自定义视图. 一般自定义的视图会继承于UIView.以下是自定义视图的要点和步骤: 1.创建一个UIView子类 2.在类的初始化方法中添加子视图 3.类的.h文件提供一些接口(方法),便于外界操作子视图. 例子及相应代码: 例题:假设我们使用LTView类代表label-textfield视图.创建一个LTView类继承于U

攻城狮在路上(叁)Linux(二十五)--- linux内存交换空间(swap)的构建

swap的功能是应付物理内存不足的状况,用硬盘来暂时放置内存中的信息. 对于一般主机,物理内存都差不多够用,所以也就不会用到swap,但是对于服务器而言,当遇到大量网络请求时或许就会用到. 当swap被使用的时候,主机的硬盘灯就会闪烁不停. 本篇介绍两种方式:1.设置一个swap分区   2.创建一个虚拟内存的文件. 一.使用物理分区构建swap: 1.首先是分区: A.fdisk /dev/sda; <== 根据后续提示创建一个分区. B.修改分区的ID,因为fdisk默认将分区的ID作为文件

当应用程序接收到内存警告的时候怎么处理?

当收到内存警告的时候,应用程序会将警告一级一级往下传递,传递顺序是UIApplication->UIWindow->rootViewController(如果有子控制器)->childViewControllers. 当控制器接收到警告之后,就会调用didReceiveMemoryWarning方法.一般会在这个方法中做几件事: 1.在iOS6之前的处理方式(见图) 2.在iOS6之后的处理方式如下: - (void)didReceiveMemoryWarning { [super di

视图控制器、MVC、屏幕旋转、内存警告

使用视图控制器的步骤: 1.创建一个根视图控制器 aController 2.在AppDelegate中引用aController的头文件,并且指定AppDelegate的根视图控制器为aController,代码如图: 3.设置了AppDelegate的根视图控制器,但是aController视图控制器的默认视图是空白视图,并且背景色是透明色,所以如果想要显示内容,就有两种方法,一种是:直接在viewDidLoad方法中创建视图,并且添加到根视图上面(viewDidLoad是视图控制器自带的根

C++二维数组动态申请内存

好久没用C++刷题了,今天早上刷了几条题,感觉很陌生了.怪我,大二下实在太颓废了,没啥作为. 今天更新个关于c++二维数组内存申请的问题,当初作为菜鸟初学指针的时候,还是在这方面有点搞不通的.今天用到了,顺便写下来,适当时候给C++初学者用用. -----------C++二维数组动态申请内存-------------- 如果对new和delete不是很了解的话可以到这里来看看,http://www.cnblogs.com/hazir/p/new_and_delete.html 首先,我们一般需