swift 學(xué)習(xí)之自動(dòng)引用計(jì)數(shù)

學(xué)習(xí)和研究的主要是“實(shí)例對(duì)象和實(shí)例對(duì)象直接的相會(huì)強(qiáng)引用所產(chǎn)生的內(nèi)從泄漏”和“使用閉包產(chǎn)生的強(qiáng)引用造成的內(nèi)存泄漏”
注意:只有以引用類型存儲(chǔ)或者傳遞的才會(huì)存在自動(dòng)引用計(jì)數(shù),比如類狰贯,閉包堪唐,而枚舉驮配、結(jié)構(gòu)體等這都是值存儲(chǔ)秃症,值傳遞不存在引用計(jì)數(shù)問(wèn)題(其實(shí)也就是Object-c中我們熟悉的ARC南片,和他的原理是一樣的)

實(shí)例對(duì)象和實(shí)例對(duì)象之間的相互引用造成的內(nèi)存泄漏
1>產(chǎn)生原因
兩個(gè)類中都有對(duì)方類的實(shí)例變量作為自己的屬性眼滤,舉個(gè)例子:創(chuàng)建一個(gè)Person類和一個(gè)Clazz類

Class Person {
var clazz:Clazz?
}
Class Clazz {
var person:Person?
}
// 創(chuàng)建兩個(gè)對(duì)象,并且賦值給對(duì)方就會(huì)造成循環(huán)引用
let jason = Person()
let class1_1 = Clazz()
jason.clazz = class1_1
class1_1.person = jason
上面的例子赏僧,就是一個(gè)循環(huán)引用的例子大猛,jason->Person<->class1_1->Clazz .
2> 那么該怎么解決這個(gè)問(wèn)題呢
在Objective-C中我們知道解決這種類與類之間的強(qiáng)引用,就是聲明屬性的時(shí)候一個(gè)用強(qiáng)引用一個(gè)用弱引用次哈,那么在swift中是如何解決這種問(wèn)題的呢胎署?
swift 提供了兩種方式:弱引用(weak修飾)和無(wú)主引用(unowned修飾)
使用法則:弱引用在生命周期內(nèi)有可能變成nil使用,一旦申明就不會(huì)變成nil用無(wú)主引用 窑滞。
事實(shí)上規(guī)則還是和objective-C的規(guī)則一樣琼牧,遇到這種情況也是一個(gè)用強(qiáng)引用一個(gè)用弱引用或者無(wú)主引用。
注意:存在一種特殊的情況哀卫,那就是這兩個(gè)類各自持有的對(duì)方實(shí)例對(duì)象都必須有值巨坊,那么這種情況就需要一個(gè)用無(wú)主引用,一個(gè)用隱式展開可選屬性

閉包循環(huán)引用造成的內(nèi)存泄漏
1>造成原因:這是一種閉包和類之間的引用造成的此改。具體原因就是:一個(gè)類將閉包作為自己的屬性趾撵,然后在類中給閉包賦值,在閉包中又引用了自身,造成循環(huán)引用占调,內(nèi)存泄漏
2>解決問(wèn)題的辦法
在objective-C中我們解決的辦法就是重新聲明類實(shí)例為__weak/__block暂题,兩個(gè)修飾詞的區(qū)別是__weak只能修飾對(duì)象,而__block可以修飾對(duì)象和普通變量(需要在block里修改的變量)
而在swift中出現(xiàn)了一個(gè)新的概念:占有列表究珊,在swift就是通過(guò)定義占有列表來(lái)解決閉包的循環(huán)引用的
占有列表:占有列表中的每個(gè)元素都是由weak或者unowned關(guān)鍵字和實(shí)例的引用組成的薪者。
那么什么時(shí)候用weak:當(dāng)占有的引用有時(shí)可能為nil的時(shí)候
unwoned:當(dāng)占有的引用和閉包總是會(huì)同時(shí)銷毀時(shí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剿涮,隨后出現(xiàn)的幾起案子言津,更是在濱河造成了極大的恐慌,老刑警劉巖取试,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬槽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瞬浓,警方通過(guò)查閱死者的電腦和手機(jī)初婆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猿棉,“玉大人烟逊,你說(shuō)我怎么就攤上這事∑谈” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵乔宿,是天一觀的道長(zhǎng)位迂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)详瑞,這世上最難降的妖魔是什么掂林? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮坝橡,結(jié)果婚禮上泻帮,老公的妹妹穿的比我還像新娘。我一直安慰自己计寇,他們只是感情好锣杂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著番宁,像睡著了一般元莫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝶押,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天踱蠢,我揣著相機(jī)與錄音,去河邊找鬼棋电。 笑死茎截,一個(gè)胖子當(dāng)著我的面吹牛苇侵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播企锌,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼榆浓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了霎俩?” 一聲冷哼從身側(cè)響起哀军,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎打却,沒(méi)想到半個(gè)月后杉适,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柳击,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年猿推,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捌肴。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蹬叭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出状知,到底是詐尸還是另有隱情秽五,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布饥悴,位于F島的核電站坦喘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏西设。R本人自食惡果不足惜瓣铣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贷揽。 院中可真熱鬧棠笑,春花似錦、人聲如沸禽绪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丐一。三九已至藻糖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間库车,已是汗流浹背巨柒。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洋满。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓晶乔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牺勾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子正罢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容