18 自動(dòng)引用計(jì)數(shù)

工作機(jī)制

  • Swift和OC一樣,采用自動(dòng)引用計(jì)數(shù)來管理內(nèi)容
    • 當(dāng)有一個(gè)強(qiáng)引用指向某一個(gè)動(dòng)向時(shí),該對(duì)象的引用計(jì)數(shù)會(huì)自動(dòng)+1
    • 當(dāng)該強(qiáng)引用消失時(shí),引用計(jì)數(shù)會(huì)自動(dòng)-1
    • 當(dāng)引用計(jì)數(shù)為0時(shí),該對(duì)象會(huì)被銷毀

循環(huán)引用

  • 在通常情況下,ARC是會(huì)自動(dòng)幫助我們管理內(nèi)存的
  • 但是在開發(fā)中我們經(jīng)常會(huì)出現(xiàn)循環(huán)引用的問題,比如下面的示例
    • Student對(duì)Book對(duì)象有一個(gè)強(qiáng)引用
    • 而Book對(duì)Student有一個(gè)強(qiáng)引用
    • 在兩個(gè)強(qiáng)指針都指向nil時(shí),兩個(gè)對(duì)象的引用計(jì)數(shù)依然不為0,依然不會(huì)被銷毀,就形成了循環(huán)引用
// 1.創(chuàng)建類
class Student {
    var book : Book?

    deinit {
        print("Student -- deinit")
    }
}

class Book {
    var owner : Student?

    deinit {
        print("Book -- deinit")
    }
}

// 2.創(chuàng)建對(duì)象
var stu : Student? = Student()
var book : Book? = Book()

// 3.相互引用
stu?.book = book
book?.owner = stu

// 4.對(duì)象置nil
stu = nil
book = nil
  • 解決方案
    • swift提供了兩種解決方案
      • weak : 和OC中的__weak一樣是一個(gè)弱引用.當(dāng)指向的對(duì)象銷毀時(shí),會(huì)自動(dòng)將指針指向nil
      • unowned : 和OC中的__unsafe_unretained.當(dāng)對(duì)象銷毀時(shí)依然指向原來的位置(容易引起野指針)
// 1.創(chuàng)建類
class Student {
    weak var book : Book?
    // unowned var book : Book = Book()

    deinit {
        print("Student -- deinit")
    }
}

class Book {
    var owner : Student?

    deinit {
        print("Book -- deinit")
    }
}

// 2.創(chuàng)建對(duì)象
var stu : Student? = Student()
var book : Book? = Book()

// 3.相互引用
stu?.book = book!
book?.owner = stu

// 4.對(duì)象置nil
stu = nil
book = nil
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子甲捏,更是在濱河造成了極大的恐慌逝慧,老刑警劉巖筹吐,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怎静,死亡現(xiàn)場離奇詭異捌蚊,居然都是意外死亡审姓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門旨椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晓褪,“玉大人,你說我怎么就攤上這事综慎』练拢” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵示惊,是天一觀的道長好港。 經(jīng)常有香客問我,道長米罚,這世上最難降的妖魔是什么钧汹? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮录择,結(jié)果婚禮上拔莱,老公的妹妹穿的比我還像新娘类嗤。我一直安慰自己,他們只是感情好辨宠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著货裹,像睡著了一般嗤形。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弧圆,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天赋兵,我揣著相機(jī)與錄音,去河邊找鬼搔预。 笑死霹期,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拯田。 我是一名探鬼主播历造,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼船庇!你這毒婦竟也來了吭产?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鸭轮,失蹤者是張志新(化名)和其女友劉穎臣淤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窃爷,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邑蒋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了按厘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片医吊。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刻剥,靈堂內(nèi)的尸體忽然破棺而出遮咖,到底是詐尸還是另有隱情,我是刑警寧澤造虏,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布御吞,位于F島的核電站,受9級(jí)特大地震影響漓藕,放射性物質(zhì)發(fā)生泄漏陶珠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一享钞、第九天 我趴在偏房一處隱蔽的房頂上張望揍诽。 院中可真熱鬧诀蓉,春花似錦、人聲如沸暑脆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽添吗。三九已至沥曹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碟联,已是汗流浹背妓美。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲤孵,地道東北人壶栋。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像普监,于是被迫代替她去往敵國和親贵试。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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