- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ios一点内存管理
iPhone相机和内存警告
现在我们越来越习惯于在程序中使用相机。但是,几乎在程序每次打开相机的瞬间,我们都会收到一个“Received memory warning. Level=1”内存警告 。对于iOS来说,内存永远是稀缺资源 ,因此,在你使用iPhone的高分辨率相机时,尤其需要小心。
程序员应当重视内存警告并对之进行处理,包括:
一、在viewDidUnload方法中释放内存
从iOS3.0开始, 释放内存的代码didReceiveMemoryWarning 迁移到了viewDidUnload中,我们不用覆盖didReceiveMemoryWarning方法。 事实上有不止地方会收到内存警告,因此程序中会有两个地方存在 didReceiveMemoryWarning方法:AppDelegate 和ViewController。一般,我们选择在ViewController而不是AppDelegate中处理内存警告。
当程序收到内存警告时,程序员们就必须注意了。iOS随后会自动清理当前“无用的”内存,比如内存中那些不处于顶层的ViewController和视图。
我们一般需要在viewDidUnload方法中,释放视图中无用的对象,比如UILabel、UIButton、NSArray等:
-(void)viewDidUnload
{
[super viewDidUnload];
if(ivBg)[ivBg release],ivBg=nil;
if(btSend)[btSendrelease],btSend=nil;
if(btUpload)[btUploadrelease],btUpload=nil;
if(vwBody)[vwBodyrelease],vwBody=nil;
if(backButton)[backButtonrelease],backButton=nil;
if(indicator)[indicatorrelease],indicator=nil;
if(imagePicker)[imagePickerrelease],imagePicker=nil;
if(receiverVC)[receiverVCrelease],receiverVC=nil;
}
注意,我们释放的对象必须是“无用的”。这些东西可能是任何对象,比如成员对象和UI对象。关键在于怎样认识一个对象是“有用的”还是“无用的”。实际上,对于iOS来说,任何在viewDidUnload方法中释放的东西都是“无用的”。如果你有任何对象在恢复视图时会用到,那么就不要在viewDidUnload方法中释放。例如,用户在视图中的输入——一封邮件的正文,或者用户正在编辑的图片——这些东西将在当相机使用完毕,iOS准备恢复视图时显示给用户。
如果你确实不得不节省出更多的内存,那么你可以在viewDidUnload中把一些有用的东西也释放掉,前提是,当你收到内存警告时,把这些对象持久化(保存到文件)。
而有的对象,它们本来就在xib文件中存在。在iOS恢复视图时,这些东西会从xib中恢复到内存(initWithNibName-viewDidLoad)。比如按钮、图片、静态标签等UI对象。这些对象我们就可以看作是“无用的”,在viewDidUnload方法中可以毫不客气地把它们统统释放。
二、在 didReceiveMemoryWarning 方法中设置内存警告标志
现在,虽然我们已经在viewDidUnload方法中,而不用在 didReceiveMemoryWarning方法中释放对象,但didReceiveMemoryWarning方法仍然有一个用途,就是设置内存警告变量,以让程序员知道何时收到内存警告。
首先声明一个BOOL成员作为是否收到过内存警告的标志:
BOOLmaybeSetViewNil;
然后在didReceiveMemoryWarning方法中:
maybeSetViewNil=YES;
三、在viewDidUnload方法中,保存视图数据以便恢复
在第一步中,我们提到为了“尽可能地”为iOS腾出内存,我们可以把所有对象释放,但对于“有用的”的对象,我们应该采用必要的保存策略,比如保存到文件缓存中。
仍然在viewDidUnload方法中,加入以下代码:
NSMutableDictionary*d=[[NSMutableDictionary alloc]init];
//in use objects
if(tfTitle){
if(tfTitle.text) [d setObject:tfTitle.text forKey:@tfTitle.text];
self.tfTitle=nil;
}
if(lbAttach){
if(lbA
您可能关注的文档
- HG超声波清洗机使用说明书.doc
- Hibernate总结.doc
- HenryDavidThroea.ppt
- HIS数据库从Oracle 8.16 到Oracle 11g 的升级实现.pdf
- HJ 607-2011 废矿物油回收利用污染控制技术规范.pdf
- However&Whatever的区别.ppt
- ow_to_get_the_poor_off_our_conscience翻译原文.doc
- HPLC_MS_MS法测定降糖类中成药中非法添加物格列波脲_申国华_董培智_裴社.pdf
- HSE培训管理规范.pdf
- HTC.doc
- DB51∕T 3263-2025 酒糟生物炭基有机肥生产技术规程.pdf
- DB32∕T 5079-2025 城镇供水水表安装及维护技术规程.pdf
- DB53∕T 1356-2025 精细碎石表处施工技术规范.pdf
- DB43∕T 3189-2025 湖南省钢筋桁架保温楼承板应用技术标准.pdf
- DB46∕T 666-2025 滨海砂路基设计与施工技术规范.pdf
- DB62∕T 5073-2024 公路常见特殊地基处治质量监控技术规范.pdf
- DB34∕T 4995.2-2025 高速公路分布式光伏系统建设 第2部分:设计规范.pdf
- DB37∕T 4818-2025 沥青路面泡沫沥青厂拌冷再生技术规范.pdf
- DB41∕T 2797-2024 双边箱钢-混组合梁桥工业化设计建造技术规程.pdf
- 环境社会学与社区参与考核试卷.docx
最近下载
- 1.人教版小学三年级下册数学易错题题库(含答案解析).pdf VIP
- 新能源汽车项目可行性研究报告(参考模板范文).docx
- 《文化和旅游领域重大事故隐患判定标准》解读和案例警示教育.pptx
- 【中考地理】答题技巧与模板构建:专题04_河流水文、水系特征类(答题模板)(解析版).pdf VIP
- 《泉州海丝文化》PPT课件.pptx VIP
- 《国民经济行业分类和代码表》.doc VIP
- 落实中央八项规定精神、纠治“四风”工作调查问卷.docx VIP
- 工作绩效及薪酬激励方案执行情况及改进情况总结.pptx
- 公路日常养护费—公路日常养护费用.pptx
- 百度智能云水业大模型白皮书(2024).pdf VIP
文档评论(0)