小妖女 发表于 2015-1-18 11:36:59

IOS制作之iOS 5与iOS 6的 low-memory 处置仓酷云

视图是仪表盘模型是发动机控制器是控制芯片CoreData---管理数据OBJC刚学的时候觉得CD很高深其实他是最容易用的库之一挪动设备终真个内存极其无限,使用程序必需做好low-memory处置事情,才干制止程序因内存利用过年夜而溃散。


low-memory处置思绪

一般一个使用程序会包括多个viewcontrollers,当从view跳转到另外一个view时,之前的view只是不成见形态,其实不会当即被清算失落,而是保留在内存中,以便下一次的疾速展现。可是假如使用程序吸收到体系收回的low-memorywarning,我们就不能不把以后不成见形态下的views清算失落,腾出更多的可以使用内存;以后可见的viewcontroller也要公道开释失落一些缓存数据,图片资本和一些不是正在利用的资本,以免使用程序溃散。

思绪是如许,详细的实行依据体系版本分歧而略有差别,本文将具体申明一下iOS5与iOS6的low-memory处置。
iOS5的处置

在iOS6之前,假如使用程序吸收到了low-memory告诫,以后不成见的viewcontrollers会吸收到viewDidUnload动静(也能够了解为主动挪用viewDidUnload办法),以是我们必要在viewDidUnload办法中开释失落一切outlets,和可再次创立的资本。以后可见的viewcontroller经由过程didReceiveMemoryWarning公道开释资本,详细见代码正文。


举一个复杂的例子,有如许一个viewcontroller:

[*]@interfaceMyViewController:UIViewController{
[*]NSArray*dataArray;
[*]}
[*]@property(nonatomic,strong)IBOutletUITableView*tableView;
[*]@end
对应的处置则为:

[*]#pragmamark-
[*]#pragmamarkMemorymanagement
[*]
[*]
[*]-(void)didReceiveMemoryWarning{
[*]//Releasestheviewifitdoesnthaveasuperview.
[*];
[*]
[*]//Relinquishownershipanycacheddata,images,etcthatarentinuse.
[*]}
[*]
[*]
[*]-(void)viewDidUnload{
[*]//RelinquishownershipofanythingthatcanberecreatedinviewDidLoadorondemand.
[*]//Forexample:self.myOutlet=nil;
[*]self.tableView=nil;
[*]dataArray=nil;
[*]
[*];
[*]}


iOS6的处置

iOS6放弃了viewDidUnload办法,这就意味着统统必要我们本人在didReceiveMemoryWarning中操纵。
详细应当怎样做呢?
1.将outlets置为weak
当viewdealloc时,没有人握着任何一个指向subviews的强援用,那末subviews实例变量将会主动置空。

[*]@property(nonatomic,weak)IBOutletUITableView*tableView;
2.在didReceiveMemoryWarning中将缓存数据置空

[*]#pragmamark-
[*]#pragmamarkMemorymanagement
[*]
[*]
[*]-(void)didReceiveMemoryWarning
[*]{
[*];
[*]//Dispo搜索引擎优化fanyresourcesthatcanberecreated.
[*]dataArray=nil;
[*]}
不要健忘一点,每当tableviewreload的时分,必要判别一下dataArray,若为空则从头创立。




兼容iOS5与iOS6


好吧,重点来了,倘使但愿程序兼容iOS5与iOS6怎样办呢?
这里有一个小技能,我们必要对didReceiveMemoryWarning做一些四肢举动:

[*]#pragmamark-
[*]#pragmamarkMemorymanagement
[*]
[*]
[*]-(void)didReceiveMemoryWarning
[*]{
[*];
[*]
[*]if(&&self.view.window==nil){
[*]self.view=nil;
[*]}
[*]
[*]dataArray=nil;
[*]}
判别一下view是不是是window的一部分,假如不是,那末能够宁神的将self.view置为空,以调换更多可用内存。
如许会是甚么征象呢?假设,从viewcontrollerA跳转到viewcontrollerB,然后摹拟low-memory告诫,此时,viewcontrollerA将会实行self.view=nil;当我们从B退回A时,A会从头挪用一次viewDidLoad,此时数据全体从头创立,复杂兼容无压力~~
UPDATE-2013.5.21
1.批评中,一名仁兄供应了他的办理举措:

用代码控制view意思他们玩的都是高科技IB都是垃圾很多人也纠结到底用不用IB的确很多时候IB灵活度不行但是不需要灵活度的时候还不用IB那不是装X吗要是没人用苹果还开发IB干嘛早去掉了IB在很多时候节省很多工作量UINavigationController再说说NavigationController刚接触开发的时候不明白View和View之间怎么切换的

莫相离 发表于 2015-1-20 18:17:07

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

海妖 发表于 2015-1-29 14:00:37

其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。

透明 发表于 2015-2-6 01:45:45

好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。

小女巫 发表于 2015-2-14 21:06:17

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

只想知道 发表于 2015-2-18 19:48:52

中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,

金色的骷髅 发表于 2015-3-6 10:04:27

好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。

小魔女 发表于 2015-3-11 23:55:29

其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。

蒙在股里 发表于 2015-3-19 16:31:57

每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。

老尸 发表于 2015-3-21 23:24:47

近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,

愤怒的大鸟 发表于 2015-3-24 04:51:56

特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地

第二个灵魂 发表于 2015-4-13 06:08:40

培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦,

不帅 发表于 2015-4-21 00:52:26

还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。

灵魂腐蚀 发表于 2015-4-27 03:59:36

首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书

变相怪杰 发表于 2015-4-28 13:52:23

以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。

深爱那片海 发表于 2015-5-6 07:11:59

看完这个你就可以有多种选择来踏入做应用的阶段

简单生活 发表于 2015-5-9 09:54:16

看《iPhone 4与iPad开发基础教程》,跟着一步步来

爱飞 发表于 2015-5-10 03:51:44

特别是在校的学生,都存在一个小小的尴尬——虽然学习iOS开发的热情高涨,但由于没有多余的银子购买昂贵的Mac电脑而踟蹰不前。其实,针对初学者,如果想进入iOS开发的天地

仓酷云 发表于 2015-6-6 16:37:06

从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,

若天明 发表于 2015-6-12 03:21:37

学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。
页: [1] 2
查看完整版本: IOS制作之iOS 5与iOS 6的 low-memory 处置仓酷云