An unowned reference is a non-strong (or weak) reference to an instance. This means that the reference to the instance is not taken into account by ARC. An unowned reference is always expected to contain a value and should never be nil.
We begin by creating two more classes, MyClass1_Unowned and MyClass2_Unowned:
class MyClass1_Unowned {
    var name = ""
    unowned let class2: MyClass2_Unowned
    init(name: String, class2: MyClass2_Unowned) {
        self.name = name
        self.class2 = class2
        print("Initializing class1_Unowned with name \(self.name)")
    }
    deinit {
        print("Releasing class1_Unowned with name \(self.name)")
    }
}
class MyClass2_Unowned {
    var name = ""
    var class1: MyClass1_Unowned?
    init(name: String) {
    self.name = name
        print("Initializing class2_Unowned with name \...