- Hands-On Design Patterns with Swift
- Florent Vilmart Giordano Scalzo Sergio De Simone
- 174字
- 2021-07-02 14:45:07
A simple leak
Now, let's write a function that creates an instance, and does nothing else:
func createLeak() {
let leak = MemoryLeak()
}
createLeak()
When we create the new MemoryLeak instance, a self reference is set, and the retain count will be two for the duration of the function call. When the function returns, the local leak variable is not referenced anymore, so the retain count is still one, and, if there are no references to this instance in the program, we will have a leak.
In a garbage collected language, this would never happen, as unreachable objects are deallocated automatically.
Now, let's use the memory graph tool to investigate this issue:
Using this tool, at a glance, we can see the following:
- Leaks are denoted with the purple issue icon
- Upon clicking on the leaking object, we can see the issue
- The dark arrows in the memory graph are for strong references
In one go, it is now really easy for you to identify what might be wrong with your programs.