pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

詳談swift內(nèi)存管理中的引用計數(shù)

下面小編就為大家?guī)硪黄斦剆wift內(nèi)存管理中的引用計數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在swift中,每一個對象都有生命周期,當生命周期結束會調(diào)用deinit()函數(shù)進行釋放內(nèi)存空間。

觀察這一段代碼:


class Person{
 
 var name: String
 var pet: Pet?
 
 init(name: String){
  self.name = name
  print("Person", name, "is initialized")
 }
 
 init(name: String, petName: String){
  self.name = name
  self.pet = Pet(name: petName)
  print("Person", name, "is initialized")
 }
 
 deinit{
  print("Person", name, "is deinitialized!")
 }
}

class Pet{
 
 var name: String
 init(name: String){
  self.name = name;
  print("Pet", name, "is initialized")
 }
 
 deinit{
  print("Pet", name, "is deinitialized!")
 }
}

這段代碼創(chuàng)建了兩個類,分別是Person類和Pet類,每個類中都有init方法進行創(chuàng)建對象和deinit方法來釋放內(nèi)存空間,其中Person類中有兩個init方法,分別對應著是否包含Pet類的名稱。

當我們調(diào)用這兩個方法:


var snow: Person? = Person(name: "snow", petName: "wolf")
snow = nil

兩步的執(zhí)行結果是:


Pet wolf is initialized
Person snow is initialized
Person snow is deinitialized!
Pet wolf is deinitialized!

會發(fā)現(xiàn)在創(chuàng)建snow這個對象的時候調(diào)用的是第二個init方法,在這個方法中會創(chuàng)建一個新的Pet對象,因此會首先打印出Pet wolf is initialized然后是Person snow is initialized。當對snow對象進行內(nèi)存釋放的時候,將nil賦給這個對象,那么會釋放snow這個內(nèi)存空間,同時也會釋放wolf這個內(nèi)存空間。

但是如果我們調(diào)用第一種init方法的時候我們會發(fā)現(xiàn):


var snow: Person? = Person(name: "snow")

var wolf: Pet? = Pet(name: "wolf")
snow?.pet = wolf

snow = nil
wolf = nil

我們首先創(chuàng)建了一個snow對象,之后又創(chuàng)建了一個wolf對象,然后將wolf添加到snow對象中去,但是當我們對這snow這個對象進行內(nèi)存釋放的時候會發(fā)現(xiàn):


Person snow is initialized
Pet wolf is initialized
Person snow is deinitialized!

僅僅只有snow的內(nèi)存空間被釋放了,但是wolf的內(nèi)存空間并沒有被釋放,這里就和swift內(nèi)存管理中的引用計數(shù)有關了:

當我們創(chuàng)建了snow這個對象之后,我們就為它開辟了一個內(nèi)存空間,命名為a,這時候snow這個對象引用了這片內(nèi)存空間,這片內(nèi)存空間的引用計數(shù)就是1,

同樣地當我們創(chuàng)建了wolf這個對象之后,我們就為它開辟了一個內(nèi)存空間,命名為b,這時候wolf這個對象引用了這片內(nèi)存空間,這片內(nèi)存空間的引用計數(shù)就是1,

當我們將snow?.pet = wolf之后,那么snow中的一個屬性也指向了創(chuàng)建wolf這個對象的內(nèi)存空間,那么這篇內(nèi)存空間的引用計數(shù)就是2.

當我們對snow = nil進行內(nèi)存空間的釋放,那么內(nèi)存空間a的引用計數(shù)就為0了,同時內(nèi)存空間b的引用計數(shù)就為1了。

當系統(tǒng)發(fā)現(xiàn)一篇內(nèi)存空間的引用計數(shù)為0,那么,系統(tǒng)就會釋放這片內(nèi)存空間,此時內(nèi)存空間a就被釋放了。

但是內(nèi)存空間b的引用計數(shù)為1,系統(tǒng)不會進行自動的內(nèi)存釋放。只有當我們進行:


wolf = nil

操作之后,這片內(nèi)存空間b才會被釋放。

同樣地對于這樣代碼:


import UIKit

class Person{
 
 var name: String
 
 init(name: String){
  self.name = name
  print("Person", name, "is initialized")
 }
 
 deinit{
  print("Person", name, "is being deinitialized!")
 }
}

var person1: Person? = Person(name: "liuyubobobo")
var person2: Person? = person1
var person3: Person? = person1

那么person1的內(nèi)存空間的引用計數(shù)為3,如果釋放這片內(nèi)存空間的話,需要將三個對象都為nil

如果僅僅是將person1=nil的話,并不會釋放這一片內(nèi)存空間。

以上這篇詳談swift內(nèi)存管理中的引用計數(shù)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持html5模板網(wǎng)。

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權益,請聯(lián)系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要給大家介紹了關于RxSwift學習教程之類型對象Subject的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于RxSwift學習教程之Observable的相關資料,文中詳細的給大家介紹了關于新建Observable、訂閱Observable和取消訂閱并消除內(nèi)存泄漏等相關的內(nèi)容,需要的朋友可以
RxSwift是Swift函數(shù)響應式編程的一個開源庫,由Github的ReactiveX組織開發(fā),維護。下面這篇文章主要給大家介紹了關于RxSwift學習之基礎篇的相關資料,文中通過示例代碼介紹的非常詳細,需
這篇文章主要為大家詳細介紹了Swift4.0 Array數(shù)組的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
CATransition動畫主要在過渡時使用,比如兩個頁面層級改變的時候添加一個轉場效果。CATransition分為兩類,一類是公開的動畫效果,一類是非公開的動畫效果。這篇文章主要給大家介紹了
近日,iPhone X的發(fā)布在人們?nèi)罕娨鹆撕艽蟮霓Z動,下面這篇文章主要給大家介紹了關于利用Swift如何判斷iPhone X機型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
主站蜘蛛池模板: 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 车件|铜件|车削件|车床加工|五金冲压件-PIN针,精密车件定制专业厂商【东莞品晔】 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 不锈钢监控杆_监控立杆厂家-廊坊耀星光电科技有限公司 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 奥因-光触媒除甲醛公司-除甲醛加盟公司十大品牌 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 找培训机构_找学习课程_励普教育 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 锂电叉车,电动叉车_厂家-山东博峻智能科技有限公司 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 环比机械| 西子馋火锅鸡加盟-太原市龙城酉鼎餐饮管理有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 烟雾净化器-滤筒除尘器-防爆除尘器-除尘器厂家-东莞执信环保科技有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 博医通医疗器械互联网供应链服务平台_博医通 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 |