TerryCK
8/1/2017 - 12:46 AM

retainCyclePlayground

retainCyclePlayground

import Foundation


// Two object retain cycle pattern
class Person: NSObject {
    var name: String
    var departure: Departure?
    init(name:String) {
        self.name = name
    }
    deinit {
        print("person deinit")
    }
}

class Departure: NSObject {
    
    var resident: Person?
    //      resolution
    //      weak var resident: Person?
    var address: String
    init(address: String) {
        self.address = address
    }
    deinit {
        print("Departure deinit")
    }
}

var terry: Person? = Person(name: "Terry")
var kyotoTown: Departure? = Departure(address: "kyoto road")

terry?.departure = kyotoTown
kyotoTown?.resident = terry

terry = nil
kyotoTown = nil
// class Person & KyotoTown can't deinit. retain cycle occurred