码迷,mamicode.com
首页 > 编程语言 > 详细

[Swift]Day14:自动引用计数

时间:2014-11-30 21:30:22      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   ar   color   os   sp   java   on   

自动引用计数

先陪妹子看电影,贴点代码占个坑。

弱引用

可以在前面加上 weak 表明这是一个弱引用。弱引用不会保持住引用的实例,并且不会阻止 ARC 销毁被引用的实例。

可以看下下面这个例子中如何通过弱引用避免循环引用的问题:

class Person {
    let name: String
    var apartment: Apartment?

    init(name: String) {
        self.name = name
    }
    deinit {
        println("\(name) is being deinitialized")
    }
}

class Apartment {
    let number: Int
    weak var tenant: Person?

    init(number: Int) {
        self.number = number
    }
    deinit {
        println("Apartment #\(number) is being deinitialized")
    }
}
var why: Person?
var number604: Apartment?

why = Person(name: "WHY")
number604 = Apartment(number: 604)

why!.apartment = number604
number604!.tenant = why
println("nil 1")
why = nil
println("nil 2")
number604 = nil

无主引用

可以在前面加上 unowned 表明这是一个无主引用。和弱引用类似,无主引用不会牢牢保持住引用的实例。和弱引用不同的是,无主引用是永远有值的。因此,无主引用总是被定义为非可选类型。

下面这个例子:

class Customer {
    let name: String
    var card: CreditCard?

    init(name: String) {
        self.name = name
    }
    deinit {
        println("\(name) is being deinitialized")
    }
}

class CreditCard {
    let number: Int
    unowned let customer: Customer

    init(number: Int, customer: Customer) {
        self.number = number
        self.customer = customer
    }
    deinit {
        println("Card #\(number) is being deinitialized")
    }
}
var john: Customer?
john = Customer(name: "WHY")
john!.card = CreditCard(number: 1234_5678_9012_3456, customer: john!)
john = nil

References

[Swift]Day14:自动引用计数

标签:style   http   io   ar   color   os   sp   java   on   

原文地址:http://blog.csdn.net/pleasecallmewhy/article/details/41626927

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!