Skip to content

Instantly share code, notes, and snippets.

@theevo
Created September 20, 2021 21:26
Show Gist options
  • Save theevo/06fc34064f91a1adc296e519356304c3 to your computer and use it in GitHub Desktop.
Save theevo/06fc34064f91a1adc296e519356304c3 to your computer and use it in GitHub Desktop.
A always gets deinit before B
class A {
var b: B
init(b: B) {
self.b = b
}
deinit {
print(" Destroying A")
}
}
class B {
weak var a: A?
deinit {
print(" Destroying B")
}
}
func setup(_ a: inout A?, _ b: inout B?) {
b = B()
a = A(b: b!)
b?.a = a
}
func teardown(_ a: inout A?, _ b: inout B?) {
a = nil
b = nil
}
var bravo: B?
var alpha: A?
print("Scenario 1: nil bravo only")
setup(&alpha, &bravo)
bravo = nil
print("Scenario 1: end")
print("Teardown 1")
teardown(&alpha, &bravo)
print("Teardown 1: end")
print("Scenario 2: nil alpha only")
setup(&alpha, &bravo)
alpha = nil
print("Scenario 2: end")
print("Teardown 2")
teardown(&alpha, &bravo)
print("Teardown 2: end")
print("Scenario 3: nil alpha then bravo")
setup(&alpha, &bravo)
teardown(&alpha, &bravo)
print("Scenario 3: end")
print("Scenario 4: nil bravo then alpha")
setup(&alpha, &bravo)
bravo = nil
alpha = nil
print("Scenario 4: end")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment