亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

實(shí)例講解Swift中引用類型的ARC自動引用計(jì)數(shù)

2020-03-09 17:47:57
字體:
供稿:網(wǎng)友

一、引言

ARC(自動引用計(jì)數(shù))是Objective-C和Swift中用于解決內(nèi)存管理問題的方案。在學(xué)習(xí)Objective-C編程時(shí)經(jīng)常會學(xué)習(xí)到一個(gè)關(guān)于ARC的例子:在一個(gè)公用的圖書館中,每次進(jìn)入一人就將卡插入,走的時(shí)候?qū)⒆约旱目ò纬瞿米?。圖書館系統(tǒng)會判定只要有卡插入,就將圖書館的燈打開,當(dāng)所有卡都被取走后,將圖書館的燈關(guān)掉。這個(gè)例子對應(yīng)于Objective-C中的對象聲明周期管理十分貼切。每當(dāng)一個(gè)對象增加一個(gè)引用時(shí),其引用計(jì)數(shù)會加1,當(dāng)一個(gè)引用被取消時(shí),對象的引用計(jì)數(shù)減1,當(dāng)引用計(jì)數(shù)減為0時(shí),說明此對象將不再有任何引用,對象會被釋放掉,讓出內(nèi)存。Swift也采用同樣的方式進(jìn)行內(nèi)存管理。

注意:在Swift中只有引用類型有自動引用計(jì)數(shù),結(jié)構(gòu)體、枚舉這類值類型是沒有引用計(jì)數(shù)的。關(guān)于引用計(jì)數(shù)的示例代碼如下:

class MyClass {  deinit{    print("MyClass deinit")  }}var cls1:MyClass? = MyClass()var cls2:MyClass? = cls1var cls3:MyClass? = cls2cls2 = nilcls1 = nil//執(zhí)行下面代碼后才會打印“MyClass deinit”cls3 = nil

二、循環(huán)引用的處理方法

在開發(fā)中,開發(fā)者一不小心就會寫出產(chǎn)生循環(huán)引用的代碼,在上面的示例中可以看出,除非實(shí)例的引用全部解除,否則實(shí)例將不會調(diào)用析構(gòu)方法,內(nèi)存不會被釋放,如果在寫代碼時(shí),A引用了B,同樣B也引用了A,那么實(shí)際上現(xiàn)在A和B的引用計(jì)數(shù)都是2,將A和B都置為nil后,A和B實(shí)例依然保有1個(gè)引用計(jì)數(shù),都不會被釋放,實(shí)例如下:

class MyClassOne {  var cls:MyClassTwo?  deinit{    print("ClassOne deinit")  }}class MyClassTwo {  var cls:MyClassOne?  deinit{    print("ClassTwo deinit")  }}var obj1:MyClassOne? = MyClassOne()var obj2:MyClassTwo? = MyClassTwo()obj1?.cls = obj2obj2?.cls = obj1obj1=nilobj2=nil//沒有打印析構(gòu)函數(shù)的調(diào)用信息

對于上面的情況,可以將屬性聲明稱weak類型來防止這種循環(huán)引用,weak的作用在于只是弱引用實(shí)例,原實(shí)例的引用計(jì)數(shù)并不會加1,示例如下:

//關(guān)于弱引用的演示class MyClassThree{  weak var cls:MyClassFour?  deinit{    print("ClassThree deinit")  }}class MyClassFour {  var cls:MyClassThree?  deinit{    print("ClassFour deinit")  }}var obj3:MyClassThree? = MyClassThree()var obj4:MyClassFour? = MyClassFour()obj3?.cls = obj4obj4?.cls = obj3obj4=nil//此時(shí)obj3中的cls也為nilobj3?.cls

若引用的實(shí)例被釋放后,其在另一個(gè)實(shí)例中的引用也將被置為nil,所以weak只能用于optional類型的屬性,然而在開發(fā)中還有一種情況,某個(gè)類必須保有另一個(gè)類的示例,這個(gè)實(shí)例不能為nil,但是這個(gè)屬性又不能影響其原始實(shí)例的釋放,這種情況也會造成循環(huán)引用,示例如下:

class MyClassFive{  var cls:MyClassSix  init(param:MyClassSix){    cls = param  }  deinit{    print("ClassFive deinit")  }}class MyClassSix{  var cls:MyClassFive?  deinit{    print("ClassSix deinit")  }}var obj6:MyClassSix? = MyClassSix()var obj5:MyClassFive? = MyClassFive(param: obj6!)obj6?.cls = obj5obj5=nilobj6=nil//沒有打印任何信息

上面的示例也會造成循環(huán)引用,然而MyClassFive類中的cls屬性為常量不可為nil,不可使用weak弱引用來做Swift中又提供了一個(gè)關(guān)鍵字unowned無主引用來處理這樣的問題,示例如下:

class MyClassFive{  unowned var cls:MyClassSix  init(param:MyClassSix){    cls = param  }  deinit{    print("ClassFive deinit")  }}class MyClassSix{  var cls:MyClassFive?  deinit{    print("ClassSix deinit")  }}var obj6:MyClassSix? = MyClassSix()var obj5:MyClassFive? = MyClassFive(param: obj6!)obj6?.cls = obj5obj5=nilobj6=nil

關(guān)于弱引用和無主引用,其區(qū)別主要是在于:

1.弱引用用于解決Optional值的引起的循環(huán)引用。

2.無主引用用于解決非Optional值引起的循環(huán)引用。

3.個(gè)人以為,弱引用可用下圖表示:

Swift,ARC,引用,自動引用計(jì)數(shù)

4.無主引用可用如下圖表示:

Swift,ARC,引用,自動引用計(jì)數(shù)

若將上面的代碼修改如下,程序會直接崩潰:

class MyClassFive{  unowned var cls:MyClassSix  init(param:MyClassSix){    cls = param  }  deinit{    print("ClassFive deinit")  }}class MyClassSix{  var cls:MyClassFive?  deinit{    print("ClassSix deinit")  }}var obj6:MyClassSix? = MyClassSix()var obj5:MyClassFive? = MyClassFive(param: obj6!)obj6?.cls = obj5obj6=nilobj5?.cls

上面所舉的例子滿足了兩種情況,一種是兩類實(shí)例引用的屬性都是Optional值的時(shí)候使用weak來解決循環(huán)引用,一種是兩類實(shí)例有一個(gè)為非Optional值的時(shí)候使用unowned來解決循環(huán)引用,然而還有第三種情況,兩類實(shí)例引用的屬性都為非Optional值的時(shí)候,可以使用無主引用與隱式拆包結(jié)合的方式來解決,這也是無主引用最大的應(yīng)用之處,示例如下:

class MyClassSeven{  unowned var cls:MyClassEight  init(param:MyClassEight){    cls = param  }  deinit{    print("ClassSeven deinit")  }}class MyClassEight{  var cls:MyClassSeven!  init(){    cls = MyClassSeven(param:self)  }  deinit{    print("ClassEight deinit")  }}var obj7:MyClassEight? = MyClassEight()obj7=nil

除了在兩個(gè)類實(shí)例間會產(chǎn)生循環(huán)引用,在閉包中,也可能出現(xiàn)循環(huán)引用,當(dāng)某個(gè)類中包含一個(gè)閉包屬性,同時(shí)這個(gè)閉包屬性中又使用了類實(shí)例,則會產(chǎn)生循環(huán)引用,示例如下:

class MyClassNine {  var name:String = "HS"  lazy var closure:()->Void = {    //閉包中使用引用值會使引用+1    print(self.name)  }  deinit{    print("ClassNine deinit")  }}var obj9:MyClassNine? = MyClassNine()obj9?.closure()obj9=nil//不會打印析構(gòu)信息

Swift中提供了閉包的捕獲列表來對引用類型進(jìn)行弱引用或者無主引用的轉(zhuǎn)換:

class MyClassNine {  var name:String = "HS"  lazy var closure:()->Void = {    [unowned self]()->Void in    print(self.name)  }  deinit{    print("ClassNine deinit")  }}var obj9:MyClassNine? = MyClassNine()obj9?.closure()obj9=nil

捕獲列表以中括號標(biāo)識,多個(gè)捕獲參數(shù)則使用逗號分隔。


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
色综合久久综合网欧美综合网| 精品国产乱码91久久久久久网站| 中文字幕精品一区二区精品| 99产精品成人啪免费网站| 中文字幕成人网| 69堂免费视频| 日韩在线免费观看av| 台湾无码一区二区| 欧美国产一区二区三区激情无套| 在线免费观看a视频| 日本成人a网站| 欧美亚洲国产精品| 婷婷亚洲五月色综合| 国产在线中文字幕| 成**人特级毛片www免费| 国产精品夜夜夜爽张柏芝| 99视频精品免费观看| 一区二区三区日| 亚洲春色一区二区三区| 视频欧美精品| 老司机深夜福利网站| 疯狂蹂躏欧美一区二区精品| 国产小视频精品| 蜜桃精品wwwmitaows| 日本女人高潮视频| 亚洲乱码中文字幕久久孕妇黑人| 国产精品欧美日韩一区二区| 性感美女一区二区三区| 欧美精品video| 成人影院网站ww555久久精品| 97视频免费看| 欧美三级伦理在线| 亚洲免费资源| 2019最新中文字幕| 国产主播在线资源| 色综合久久综合网97色综合| 色婷婷久久久| 国产麻豆日韩欧美久久| 国产一区二中文字幕在线看| 亚洲精品按摩视频| 大色综合视频网站在线播放| 久久人人爽亚洲精品天堂| 精品中文字幕人| 中文字幕人成人乱码亚洲电影| 欧美电影在线免费观看| 国内老司机av在线| 日本高清视频www| 丰满人妻老熟妇伦人精品| 日韩码欧中文字| 操操操综合网| 日韩欧美久久| 亚洲特级片在线| 免费的国产精品| 日本成年免费网站| 无码人妻精品一区二区三区在线| 成人综合久久网| 精品国产鲁一鲁****| 国产女主播一区二区| 国产精品欧美久久久久天天影视| 成人免费视频网站入口::| 国产麻豆免费视频| 少妇饥渴放荡91麻豆| 激情综合一区二区三区| 91久久国产最好的精华液| 国产成人高清在线| 欧美大片在线播放| 国产精品福利电影一区二区三区四区| 久久99久久99| 全国男人的天堂天堂网| 麻豆一区二区三区四区精品蜜桃| 伦理片一区二区三区| 中文字幕免费高清网站| 亚洲丝袜在线视频| 亚洲天堂视频网站| 羞羞影视羞羞在线| 在线看的av| 亚洲码欧美码一区二区三区| 国产卡一卡2卡三卡免费视频| 在线观看欧美一区二区| 中文字幕一区二区三区视频| 亚洲第一网中文字幕| 国产欧美一区二区三区在线| 黄色三级在线| 日韩午夜视频在线| 欧美激情亚洲另类| 韩日精品一区| 久久国产精品国语对白| 最好看的日本字幕mv视频大全| 原创国产精品91| 乱熟女高潮一区二区在线| 国产经典自拍视频在线观看| 国产精品无码白浆高潮| 色综合一个色综合亚洲| 狠狠综合久久久综合| 精品久久久999| 国产chinesehd精品露脸| 亚洲美女啪啪| 秋霞在线一区| 91精品国产色综合久久ai换脸| 女人天堂av在线播放| 欧亚成年男女午夜| 中文字幕一区二区三区精品| 精品日韩欧美在线| 91丨九色丨国产在线| 99国产精品免费视频观看| 毛片大全在线观看| 欧美成人ⅴideosxxxxx| 国产变态拳头交视频一区二区| 亚洲淫性视频| 在线观看日韩av| 老司机深夜福利在线观看| 日韩精品一区国产麻豆| 中文字幕欧美精品在线| 午夜精品福利一区二区三区av| 99久久精品国产一区二区三区| 国产又粗又猛又黄| 麻豆91精品视频| 26uuu色噜噜精品一区二区| 久久久视频免费观看| 精品亚洲一区二区三区四区五区| 国产在线视频福利| a级网站在线观看| 999国产精品永久免费视频app| 久久99久久99精品免观看粉嫩| 久久一区免费| 午夜福利三级理论电影| 日本韩国欧美| 在线色视频观看| 国产porn在线| 2020国产在线视频| 亚洲高清久久久久久| 亚洲欧美偷拍另类| 欧美日本乱大交xxxxx| 午夜精品中文字幕| 麻豆传媒一区| 亚洲精品午夜国产va久久成人| 一区二区日韩欧美| 国产麻豆视频网站| www婷婷av久久久影片| 天天综合网天天| 国产传媒在线看| 操日韩av在线电影| 91久久精品日日躁夜夜躁欧美| 无码人妻丰满熟妇区毛片蜜桃精品| 日av中文字幕| 超碰在线免费看| 成人免费视频视频在线观看免费| 麻豆影视在线观看| 国产一级粉嫩xxxx| 色欧美乱欧美15图片| 999精品视频在线观看| 视频免费一区二区| 少妇性l交大片| 色狮一区二区三区四区视频| 国产午夜在线观看| 欧美高清视频看片在线观看| 三区四区不卡| 91亚洲精品一区| 少妇人妻无码专区视频| 悠悠色在线精品| 欧美舌奴丨vk视频| 四虎永久免费在线观看| 日本亚洲精品| 精品盗摄一区二区三区| 欧美bbxxx| 日韩理论在线| 国产精品av一区二区| 国产另类xxxxhd高清| 中文字幕乱码在线观看| 99re热这里只有精品视频| 国产综合精品视频| 老牛影视免费一区二区| 成品网站w灬+源码1| 欧美视频完全免费看| 午夜国产精品一区| 福利一区视频在线观看| 国产一区二区美女诱惑| 日韩av在线天堂| 91sao在线观看国产| 久久99蜜桃精品| 天天操天天摸天天爽| 露脸国产精品自产在线播| 国模杨依粉嫩蝴蝶150p| www.91av视频.com| 国产日韩欧美综合精品| 亚洲精品永久免费视频| 欧美精品在线网站| 欧美精品国产白浆久久久久| 中文字幕av一区中文字幕天堂| 国产真实精品久久二三区| 先锋av资源站| 久久网一区二区| 日韩dvd碟片| 日产亚洲一区二区三区| 日本成人片在线| 摸摸摸bbb毛毛毛片| 草裙成人精品一区二区三区| 亚洲欧美综合在线观看| 亚洲欧美大片| 色噜噜在线观看| 久久99久久98精品免观看软件| 99热在线观看| 久久av影院| 91亚洲午夜精品久久久久久| 欧美美乳视频| 日韩麻豆第一页| 黑人性生活视频| 在线国产福利网站| xxav视频| 性欧美在线看片a免费观看| 老司机久久精品| 91香蕉视频免费看| 丝袜美腿综合| 国产日韩欧美在线播放不卡| 免费看的黄色欧美网站| 超薄肉色丝袜足j调教99| 色综合久久久久久久久五月| 亚洲国产成人精品女人久久| 久久久久亚洲av成人毛片韩| 精品久久久久亚洲| 蜜桃日韩视频| 99re在线观看| 伊人色综合一区二区三区影院视频| 国产黄大片在线观看画质优化| 国产精品久久久久久久久久久久久久久久久| 免费观影入口看日本视频| 六月丁香激情网| 四虎影院一区二区三区| 日韩欧美色综合| 欧美日韩久久| 美女尤物在线视频| 国产一区二区高清不卡| 亚洲激情网站免费观看| 中文字幕1区2区3区| 四虎在线视频免费观看| 国产伦精品一区二区三区视频金莲| 11024精品一区二区三区日韩| 色婷婷久久久| 欧美69精品久久久久久不卡| 国产一区二区三区高清视频| 欧美人体视频| 成年人免费看毛片| 精品国产乱子伦| 久久久国产午夜精品| 欧洲亚洲精品久久久久| 色偷偷7777www人| 欧美精品videossex变态| 亚洲第一黄色网址| 国产a久久麻豆| 国产又爽又黄又刺激的软件| 色婷婷亚洲mv天堂mv在影片| 国产精品一区二区三| 午夜伦欧美伦电影理论片| 亚洲最快最全在线视频| 午夜a一级毛片亚洲欧洲| 国产精品免费视频二三区| 99精品视频一区二区| 欧美污视频久久久| 国产大奶在线| 免费观看30秒视频久久| 潘金莲一级淫片aaaaaa播放| 欧美日韩国产一区二区在线观看| 亚洲精品videossex少妇| 国产精品久久久久久久久图文区| 久久av一区二区三区漫画| 欧美一级片网址| 波多野结衣在线网站| 五月婷中文字幕| 最新四虎影在线在永久观看www| 五月天激情国产综合婷婷婷| 日韩午夜激情免费电影| 亚洲四虎av| 亚洲人成午夜免电影费观看| 欧美一区二区三区高清视频| 亚洲色图视频网站| 可以看美女隐私的网站| av手机天堂网| 在线观看日韩一区| 神马午夜伦理影院| 久久国产精品亚洲77777| 亚洲午夜久久久影院伊人| 中文亚洲字幕| 久久精品国产999大香线蕉| 亚洲成人影院少妇| 97午夜影院| 日韩欧美中文字幕精品| 日本h片久久| 曰皮视频在线播放免费的| 韩日一区二区| 怡红院精品视频| 91精品综合久久久久久| 欧美亚洲免费| 国产精品免费在线免费| 久久人人爽人人爽爽久久| 99久久精品国产亚洲| 午夜久久久久久久久久影院| 久久男人的天堂| 亚洲直播在线一区| 国产视频一视频二| 国产一起色一起爱| 91极品尤物在线播放国产| yjizz国产| 亚洲成人久久一区| yw.139尤物在线精品视频| 久久久一本精品99久久精品66| 亚洲一级特黄| 成人在线黄色电影| 欧美高清视频一区| 国产精品美女一区二区| 日本黄色免费观看| 狠狠躁夜夜躁人人躁婷婷91| 国产视频精品视频| 国产亚洲观看| 国产午夜精品久久久久久久久| 亚洲自拍偷拍一区二区三区| 91系列在线播放| 一个色综合导航| 麻豆av一区二区| 色欲欲www成人网站| 日韩影片中文字幕| 牛牛影视精品影视| 国产精一品亚洲二区在线视频| 中文字幕在线观看一区二区三区| 欧美在线三级| 麻豆成人av在线| 国产成人久久精品77777| 日日摸天天添天天添破| 中文字幕观看视频|