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機型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
主站蜘蛛池模板: 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 一体化污水处理设备,一体化污水设备厂家-宜兴市福源水处理设备有限公司 | 防爆型气象站_农业气象站_校园气象站_农业四情监测系统「山东万象环境科技有限公司」 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 家用净水器代理批发加盟_净水机招商代理_全屋净水器定制品牌_【劳伦斯官网】 | 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 | 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 上海宿田自动化设备有限公司-双面/平面/单面贴标机 | 武汉不干胶印刷_标签设计印刷_不干胶标签印刷厂 - 武汉不干胶标签印刷厂家 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 线粒体膜电位荧光探针-细胞膜-标记二抗-上海复申生物科技有限公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 杭州可当科技有限公司—流量卡_随身WiFi_AI摄像头一站式解决方案 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 长春网站建设,五合一网站设计制作,免费优化推广-长春网站建设 | 代理记账_公司起名核名_公司注册_工商注册-睿婕实业有限公司 | 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 精密交叉滚子轴承厂家,转盘轴承,YRT转台轴承-洛阳千协轴承 | 贴片电容-贴片电阻-二三极管-国巨|三星|风华贴片电容代理商-深圳伟哲电子 | 玖容气动液压设备有限公司-气液增压缸_压力机_增压机_铆接机_增压器 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 烘干设备-热泵烘干机_广东雄贵能源设备有限公司 |