Memory Graph Debugger
var referenceOne: Person? = Person( )
Figure 1
var reference2 = referenceOne
Figure 2
referenceOne = nil
Figure 3
reference2 = nil
Figure 4
Figure 5
var user: User? = User() //reference count 1 User object
var todo: Todo? = Todo() //Reference count 1 Todo Object
Figure 6
user?.todo = todo //reference count 2 Todo Object
todo?.associatedUser = user //reference count 2 User Object
Figure 7
user = nil //reference count 1 User object
todo = nil //reference count 1 Todo object
Figure 8
Figure 9
var user: User? = User() //reference count 1 User object
var todo: Todo? = Todo() //reference count 1 Todo Object
Figure 10
user?.todo = todo //reference count 2 Todo Object
todo?.associatedUser = user //reference count 1 User object
Figure 11
user = nil
Figure 12
Figure 13
todo = nil
Figure 14
Figure 15
var someClosure: (() -> Int)?
someClosure = { return self.a + self.b }
Figure 16
Figure 17
Figure 18
var someClosure: (() -> Int)?
self.someClosure = { [weak self] in guard let `self` = self else { return 0 return self.a + self.b}
Figure 19
Figure 20
Figure 21
Figure 22
Figure 23
Gif 1
Figure 24
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.execute( )
}
SingletonClass.shared.someSingletonMethod(self.a) { (value) in
self.execute( )
}
Figure 25
SingletonClass.shared.someSingletonMemoryLeakMethod(self.a) { (value) in
self.execute( )
}
Figure 26
Figure 27
Figure 28
Figure 29
Figure 30
Figure 31