Swift中强和弱的引用

在Objective C中,您可以将一个属性定义为具有强或弱的引用,如下所示:

@property(strong)... @property(weak)... 

这是如何迅速完成的?

直接从Swift语言指南 :

 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") } } 

属性默认是强大的。 但是看看“公寓”这个阶层的租户属性,它被宣布为弱。 您也可以使用unowned关键字,这将转换为Objective-C中的unsafe_unretained

https://itunes.apple.com/tr/book/swift-programming-language/id881256329?mt=11

var默认是强壮的。 你可以在一个var之前添加weak关键字来使它变弱。

默认情况下属性很强,但如果你想要一个弱财产,你可以:

  weak var tenant: Person? 

来源: https : //developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html

只是想让你知道一个var默认是强壮的,但是在它前面添加“weak”就会使它变弱。 以防你错过了它

这是一个重要的评论,但我不能适应。

如果你这样做

 weak let name : SomeClass 

它会给出以下错误:

'弱'必须是一个可变variables,因为它可能在运行时改变

你必须这样做

 weak var name : SomeClass 

“弱”variables应该有可选types“SomeClass?”

所以你必须这样做:

 weak var name : SomeClass? 

另外,在Swift中,所有弱引用都是非常量的可选参数(认为var vs let),因为当没有任何强引用时,引用可以并且将被改变为零。 看到这里

作为这种强制性选项的结果,你总是需要打开它才能访问它的实际值。