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

強(qiáng)引用循環(huán)

兩個(gè)引用類型實(shí)例之間相互引用。

解決方式

實(shí)例之間的:

  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):
在定義閉包時(shí),添加一個(gè)列表,用來捕獲產(chǎn)生循環(huán)的引用。

lazy var someClosure: (Int, String) -> String = {
    [unowned self, weak someInstance] (index: Int, stringToProcess: String) -> String in
    // closure body goes here
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 126.析構(gòu)器 在一個(gè)類實(shí)例銷毀前,一個(gè)析構(gòu)器會(huì)立即調(diào)用。使用deinit 關(guān)鍵字來表示析構(gòu)器, 跟構(gòu)造器寫法類似...
    無灃閱讀 902評(píng)論 0 4
  • 自動(dòng)引用計(jì)數(shù)(ARC) Swift中ARC的原理同OC中是相同的,簡(jiǎn)單來講就是當(dāng)實(shí)例不再被使用(引用計(jì)數(shù)為0)時(shí),...
    WhisperKarl閱讀 966評(píng)論 0 3
  • Swift管理內(nèi)存方式和OC極其相似,都是采用自動(dòng)引用計(jì)數(shù) ARC機(jī)制來跟蹤和管理。ACR 會(huì)在實(shí)例不再使用的情況...
    HunterDude閱讀 714評(píng)論 0 1
  • 這幾天小家伙不肯喝奶,奶瓶一到嘴巴就哭,要么是過了指定時(shí)間1個(gè)多小時(shí),要么就是要睡覺的時(shí)候,睡覺的時(shí)候喝的比較少一...
    林小夏199閱讀 179評(píng)論 0 1
  • 終于做了這個(gè)決定,心里感覺豁然開朗了,連著幾天的陰霾終于散去,決定了以后沒有多余的話語,對(duì)于朋友的努力和加油...
    好笨的633閱讀 148評(píng)論 0 1

友情鏈接更多精彩內(nèi)容