ios一点内存管理

ios一点内存管理

ID:35514818

大小:235.50 KB

页数:13页

时间:2019-03-25

ios一点内存管理_第1页
ios一点内存管理_第2页
ios一点内存管理_第3页
ios一点内存管理_第4页
ios一点内存管理_第5页
资源描述:

《ios一点内存管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、iPhone相机和内存警告现在我们越来越习惯于在程序中使用相机。但是,几乎在程序每次打开相机的瞬间,我们都会收到一个“Receivedmemorywarning.Level=1”内存警告。对于iOS来说,内存永远是稀缺资源,因此,在你使用iPhone的高分辨率相机时,尤其需要小心。程序员应当重视内存警告并对之进行处理,包括:一、在viewDidUnload方法中释放内存从iOS3.0开始,释放内存的代码didReceiveMemoryWarning迁移到了viewDidUnload中,我们不用覆盖didReceiveMemoryWarning方法

2、。事实上有不止地方会收到内存警告,因此程序中会有两个地方存在didReceiveMemoryWarning方法:AppDelegate和ViewController。一般,我们选择在ViewController而不是AppDelegate中处理内存警告。当程序收到内存警告时,程序员们就必须注意了。iOS随后会自动清理当前“无用的”内存,比如内存中那些不处于顶层的ViewController和视图。我们一般需要在viewDidUnload方法中,释放视图中无用的对象,比如UILabel、UIButton、NSArray等:-(void)viewDi

3、dUnload{[superviewDidUnload];if(ivBg)[ivBgrelease],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(i

4、magePicker)[imagePickerrelease],imagePicker=nil;if(receiverVC)[receiverVCrelease],receiverVC=nil;}注意,我们释放的对象必须是“无用的”。这些东西可能是任何对象,比如成员对象和UI对象。关键在于怎样认识一个对象是“有用的”还是“无用的”。实际上,对于iOS来说,任何在viewDidUnload方法中释放的东西都是“无用的”。如果你有任何对象在恢复视图时会用到,那么就不要在viewDidUnload方法中释放。例如,用户在视图中的输入——一封邮件的正文,

5、或者用户正在编辑的图片——这些东西将在当相机使用完毕,iOS准备恢复视图时显示给用户。如果你确实不得不节省出更多的内存,那么你可以在viewDidUnload中把一些有用的东西也释放掉,前提是,当你收到内存警告时,把这些对象持久化(保存到文件)。而有的对象,它们本来就在xib文件中存在。在iOS恢复视图时,这些东西会从xib中恢复到内存(initWithNibName->viewDidLoad)。比如按钮、图片、静态标签等UI对象。这些对象我们就可以看作是“无用的”,在viewDidUnload方法中可以毫不客气地把它们统统释放。二、在didRe

6、ceiveMemoryWarning方法中设置内存警告标志现在,虽然我们已经在viewDidUnload方法中,而不用在didReceiveMemoryWarning方法中释放对象,但didReceiveMemoryWarning方法仍然有一个用途,就是设置内存警告变量,以让程序员知道何时收到内存警告。首先声明一个BOOL成员作为是否收到过内存警告的标志:BOOLmaybeSetViewNil;然后在didReceiveMemoryWarning方法中:maybeSetViewNil=YES;三、在viewDidUnload方法中,保存视图数据以

7、便恢复在第一步中,我们提到为了“尽可能地”为iOS腾出内存,我们可以把所有对象释放,但对于“有用的”的对象,我们应该采用必要的保存策略,比如保存到文件缓存中。仍然在viewDidUnload方法中,加入以下代码:NSMutableDictionary*d=[[NSMutableDictionaryalloc]init];//"inuse"objectsif(tfTitle){if(tfTitle.text)[dsetObject:tfTitle.textforKey:@"tfTitle.text"];self.tfTitle=nil;}if(lb

8、Attach){if(lbAttach.text)[dsetObject:lbAttach.textforKey:@"lbAttach.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。