美文网首页swift
Swift 中的强引用循环

Swift 中的强引用循环

作者: 乐人曹 | 来源:发表于2014-08-24 15:38 被阅读0次

强引用循环

两个引用类型实例之间相互引用。

解决方式

实例之间的:

  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):
在定义闭包时,添加一个列表,用来捕获产生循环的引用。

lazy var someClosure: (Int, String) -> String = {
    [unowned self, weak someInstance] (index: Int, stringToProcess: String) -> String in
    // closure body goes here
}

相关文章

  • Swift--内存管理

    Swift内存管理概述 强引用循环 打破强引用循环 闭包中的强引用循环 Swift内存管理概述 Swift中的AR...

  • Swift进阶06:内存管理 & Runtime

    本文主要介绍Swift中的内存管理,涉及引用计数、弱引用、强引用、循环引用、Runtime等 内存管理 - 强引用...

  • Swift进阶 05:内存管理 & Runtime

    本文主要介绍Swift中的内存管理,涉及引用计数、弱引用、强引用、循环引用与Runtime等。 内存管理-强引用 ...

  • Swift-05:内存管理

    swift中的内存管理,涉及引用计数、弱引用、强引用、循环引用、Runtime是什么样子的呢? 内存管理 - 强引...

  • Swift 中的强引用循环

    强引用循环 两个引用类型实例之间相互引用。 解决方式 实例之间的: Weak 引用。适用于一方的引用可为 nil ...

  • Swift如何正确防止循环引用

    循环引用就是两个对象互相强引用对方,导致对象实例无法释放,那么在swift中如何防止这种循环引用呢? 一种方式是使...

  • 一些小东西

    1. swift中的数组等导致的循环引用 像上面这样,由于Person对象强引用着friends数组,同时,它里面...

  • Swift循环引用的解决方案

    解决实例之间的循环强引用,Swift 提供了两种办法用来解决你在使用类的属性时所遇到的循环强引用问题:弱引用(we...

  • swift语法02

    Swift面向对象 01-闭包的循环引用 循环引用形成条件闭包中访问了self或者self的属性/方法必须有一个强...

  • Swift语法--12-3闭包的循环引用

    Swift语法--12-3闭包的循环引用 闭包循环引用产生条件 如果在HttpTool中有对闭包进行强引用,则会形...

网友评论

    本文标题:Swift 中的强引用循环

    本文链接:https://www.haomeiwen.com/subject/uxfytttx.html