class Person {
let name: String
// weak does not keep the referent alive, so no cycle forms
weak var friend: Person?
init(_ name: String) { self.name = name }
deinit { print("bye \(name)") }
}
var a: Person? = Person("A")
var b: Person? = Person("B")
a?.friend = b
b?.friend = a
a = nil
b = nil
print("done")avoid a retain cycle with weak