Swift 中的強引用循環(huán)

強引用循環(huán)

兩個引用類型實例之間相互引用。

解決方式

實例之間的:

  1. Weak 引用垮衷。適用于一方的引用可為 nil 的情形厅翔。
class Person {
    let name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
}

class Apartment {
    let number: Int
    init(number: Int) { self.number = number }
    weak var tenant: Person?
}
  1. Unowned 引用。適用于一方的引用不能為 nil 的情形搀突。

    class Customer {
        let name: String
        var card: CreditCard?
        init(name: String) {
            self.name = name
        }
    }
    
    class CreditCard {
        let number: UInt64
        unowned let customer: Customer
        init(number: UInt64, customer: Customer) {
            self.number = number
            self.customer = customer
        }
    }
    
  2. Unowned 引用和隱式解包的可選屬性刀闷。適用于雙方的引用都不能為 nil 的情形。

    class Country {
        let name: String
        let capitalCity: City!
        init(name: String, capitalName: String) {
            self.name = name
            self.capitalCity = City(name: capitalName, country: self)
        }
    }
    
    class City {
        let name: String
        unowned let country: Country
        init(name: String, country: Country) {
            self.name = name
            self.country = country
        }
    }
    

閉包的(Capture List):
在定義閉包時仰迁,添加一個列表甸昏,用來捕獲產生循環(huán)的引用。

lazy var someClosure: (Int, String) -> String = {
    [unowned self, weak someInstance] (index: Int, stringToProcess: String) -> String in
    // closure body goes here
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末徐许,一起剝皮案震驚了整個濱河市施蜜,隨后出現的幾起案子,更是在濱河造成了極大的恐慌绊寻,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異澄步,居然都是意外死亡冰蘑,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門村缸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祠肥,“玉大人,你說我怎么就攤上這事梯皿〕鹣洌” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵东羹,是天一觀的道長剂桥。 經常有香客問我,道長属提,這世上最難降的妖魔是什么权逗? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮冤议,結果婚禮上斟薇,老公的妹妹穿的比我還像新娘。我一直安慰自己恕酸,他們只是感情好堪滨,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蕊温,像睡著了一般袱箱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寿弱,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天犯眠,我揣著相機與錄音,去河邊找鬼症革。 笑死筐咧,一個胖子當著我的面吹牛,可吹牛的內容都是我干的噪矛。 我是一名探鬼主播量蕊,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艇挨!你這毒婦竟也來了残炮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤缩滨,失蹤者是張志新(化名)和其女友劉穎势就,沒想到半個月后泉瞻,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡苞冯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年袖牙,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舅锄。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞭达,死狀恐怖,靈堂內的尸體忽然破棺而出皇忿,到底是詐尸還是另有隱情畴蹭,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布鳍烁,位于F島的核電站叨襟,受9級特大地震影響,放射性物質發(fā)生泄漏老翘。R本人自食惡果不足惜芹啥,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铺峭。 院中可真熱鬧墓怀,春花似錦、人聲如沸卫键。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莉炉。三九已至钓账,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間絮宁,已是汗流浹背梆暮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绍昂,地道東北人啦粹。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像窘游,于是被迫代替她去往敵國和親唠椭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • 126.析構器 在一個類實例銷毀前,一個析構器會立即調用忍饰。使用deinit 關鍵字來表示析構器, 跟構造器寫法類似...
    無灃閱讀 779評論 0 4
  • 自動引用計數(ARC) Swift中ARC的原理同OC中是相同的贪嫂,簡單來講就是當實例不再被使用(引用計數為0)時,...
    WhisperKarl閱讀 874評論 0 3
  • Swift管理內存方式和OC極其相似艾蓝,都是采用自動引用計數 ARC機制來跟蹤和管理力崇。ACR 會在實例不再使用的情況...
    HunterDude閱讀 582評論 0 1
  • 這幾天小家伙不肯喝奶斗塘,奶瓶一到嘴巴就哭,要么是過了指定時間1個多小時亮靴,要么就是要睡覺的時候逛拱,睡覺的時候喝的比較少一...
    林小夏199閱讀 163評論 0 1
  • 終于做了這個決定,心里感覺豁然開朗了台猴,連著幾天的陰霾終于散去,決定了以后沒有多余的話語俱两,對于朋友的努力和加油...
    好笨的633閱讀 124評論 0 1