class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { println("\(name) is being deinitialized") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
weak var tenant: Person?
deinit { println("Apartment #\(number) is being deinitialized") }
}
6 回答
默认情况下属性很强,但如果你想要一个弱属性,你可以:
资料来源:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html
只是想让你知道默认情况下var是强的,但是通过在它前面添加“弱”你会使它变弱 . 以防你错过了它
直接从Swift Language guide:
默认情况下属性很强 . 但是看看“公寓”这个类的租户属性,它被宣称为弱者 . 您还可以使用unowned关键字,该关键字转换为Objective-C中的unsafe_unretained
https://itunes.apple.com/tr/book/swift-programming-language/id881256329?mt=11
默认情况下,var很强 . 您可以在var之前添加weak关键字以使其变弱 .
这是一个重要的评论,但我无法适应它 .
如果你这样做
它会给出以下错误:
你必须这样做
所以你必须这样做:
此外,在Swift中,所有弱引用都是非常量的Optionals(想想var与let),因为当没有任何东西持有强引用时,引用可以并且将被突变为nil . 见here
由于这种强制性的可选化,您始终需要打开它以便可以访问其实际值 .
详情
xCode 9.1,Swift 4
有关ARC使用的更多信息
Kaan Dedeoglu回答
ARC and Memory Management in Swift
"WEAK, STRONG, UNOWNED, OH MY!" - A GUIDE TO REFERENCES IN SWIFT
ARC Swift Tutorial
完整样本
结果