博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS内存警告处理
阅读量:6229 次
发布时间:2019-06-21

本文共 1047 字,大约阅读时间需要 3 分钟。

IPhone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息。收到此消息后,app必须正确处理,否则可能出错或者出现内存泄露。

app收到Memory Warning后会调用:

UIApplication::didReceiveMemoryWarning -> UIApplicationDelegate::applicationDidReceiveMemoryWarning,然后调用当前所有的viewController进行处理。因此处理的主要工作是在viewController。

我们知道,创建viewcontroller时,执行顺序是loadview -> viewDidLoad。

当收到内存警告时,如果viewcontroller未显示(在后台),会执行didReceiveMemoryWarning -> viewDidUnLoad;如果viewcontroller当前正在显示(在前台),则只执行didReceiveMemoryWarning。

当重新显示该viewController时,执行过viewDidUnLoad的viewcontroller(即原来在后台)会重新调用loadview -> viewDidLoad。

因此主要注意下面几个函数:

loadView 创建view,构建界面;
viewDidLoad 做些初始化工作。由于在初次创建viewcontroller和重新恢复时都会调用,因此这个函数需要注意区分不同的情况,设置正确的状态。
didReceiveMemoryWarning 释放不必须的内存,比如缓存,未显示的view等。
viewDidUnLoad 最大程度的释放可以释放的内存。比如应该释放view,这些view在调用loadview后可以重新生成。(其中成员变量释放后应设置为nil)。对于非界面的数据是否释放,需要具体分析,可以恢复的数据可以释放,不能恢复的数据就不要释放。

实际中如果viewcontroller是用xib生成的界面,则需要我们做的就比较少,主要是在viewDidLoad中恢复原来的界面状态。

如果是通过编程创建的界面,则需要做的工作就要更多些,上面4个函数中都需要进行正确处理。

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/p/3383805.html,如需转载请自行联系原作者
你可能感兴趣的文章
Part 6.系统编程之线程--1(创建,全局变量访问,与进程对比)
查看>>
Unicode和UTF-8
查看>>
笔试算法题(48):简介 - A*搜索算法(A Star Search Algorithm)
查看>>
机器学习-线性回归
查看>>
Editplus的设置
查看>>
wget使用技巧
查看>>
转:Bash脚本15分钟进阶指导
查看>>
excel表格如何限制单元格输入内容
查看>>
认识一下ES6的Reflect和Proxy
查看>>
升级cordova
查看>>
Alpha 冲刺 (10/10)
查看>>
简述mysql数据库配置文件
查看>>
count
查看>>
P3518 [POI2011]strongbox
查看>>
JS判断数组方法大全
查看>>
【20181019T3】比特战争【最小生成树思想】
查看>>
Python之初识模块
查看>>
iphone-common-codes-ccteam源代码 CCUICalloutView.m
查看>>
鐵打的營盤
查看>>
成功来自刻意练习
查看>>