Hi,
I am exploring Closures and trying to understand how they works. Closure have a special key feature that they can capture the context of the variables/constants from surroundings, once captured we can still use them inside the closure even if the scope in which they are defined does not exist.
I want to understand the lifecycle of captured variable/constant i.e., where are these captured variables stored and when these get created and destroyed. How is memory managed for captured variables or constants in a closure, depending on whether they are value types or reference types?
Closures are themselves reference types. When you form a closure, it captures (closes over, hence the name) any values used from the enclosing scope. How it does that depends on:
-
The type, specifically whether it’s a value or reference type
-
The mutability of the value, that is, whether it’s
let
orvar
-
The contents of the closure’s capture list, if it has one
Unless the capture is weak, your reference to the closure keeps any referenced values alive.
Capture lists are documented here.
That section of the doc, and the other sections it links to, do a good job of explaining how this works. I’m gonna suggest you read that now and then reply back here if you have any follow-up questions.
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"