IOS开发入门之allocWithZone/copyWithZone/NSZone解析
凌雪 2018-10-23 来源 :网络 阅读 1570 评论 0

摘要:本文将带你了解IOS开发入门iOS开发中allocWithZone/copyWithZone/NSZone解析,希望本文对大家学IOS有所帮助。

本文将带你了解IOS开发入门iOS开发中allocWithZone/copyWithZone/NSZone解析,希望本文对大家学IOS有所帮助。


         

iOS开发中allocWithZone/copyWithZone/NSZone解析,NSZone可以想象成一个内存池,alloc或是dealloc这些操作,都是在这个内存池中操作的。
Cocoa总是会配置一个默认的NSZone,任何默认的内存操作都是在这个“zone”上操作的。默认的NSZone的缺陷在于,它是全局范围的,时间一长,必然会导致内存的碎片化,如果你需要大量的alloc一些object,那么性能就会受到一些影响。
所有cocoa提供方法,你可以自己生成一个NSZone,并将alloc,   copy全部限制在这个”zone“之内。

<img style="width: 630px;   height: 424.97px;" alt="内存碎片化的问题"   src="https://www.2cto.com/uploadfile/Collfiles/20171031/201710310907017.png"   title="?鷌?腽奌《?¨^绞&?驲f夀?MI?'xi曕湣?歟壠瓓壼喎?"   https:="" www.2cto.com="" os=""   "="" target="_blank">系统默认的NSZone来对应用的对象进行管理。那么在什么时候你会想要有一个自己控制的NSZone呢?当默认的NSZone里面管理了大量的对象的时候。这种时候,大量对象的释放可能会导致内存严重碎片化,cocoa本身有做过优化,每次alloc的时候会试图去填满内存的空隙,但是这样做的话时间的开销很大。于是乎,你可以自己创建一个NSZone,这样当你有大量的alloc请求的时候就全部转移到指定的NSZone里面去,减少了大量的时间开销。而且,使用NSZone还可以一口气把你创建的zone里面的东西都清除掉,省掉了大量的时间去一个个dealloc对象。总的来说,当你需要创建大量的对象的时候,使用NSZone还是能节省一些时间的,不过前提是你得知道怎么去用它。

另一篇2002年的文章就说开发者已经不能创建一个真正的NSZone了(看来也许这就是历史原因了),只能创建main   zone的一个child zone。
Timothy J.wood   的回答

Timothy还讲到如果可以使用NSZone的话,多个对象在同一时间alloc可以减少分页使用,而且在同一个时间dealloc可以减少内存碎片。Apple在这方面是做了处理了,对开发者透明,无需开发者自己去做。
allocWithZone不被Apple鼓励使用,基本上多数时候程序员也不需要自己去管理自己的zone。

    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程