According to the Apple documentation
When a block is copied, it creates strong references to object variables used within the block. If you use a block within the implementation of a method:
If you access an instance variable by reference, a strong reference is made to self; If you access an instance variable by value, a strong reference is made to the variable.
I want to understand how a block manages to do this internally. How does it allocate memory for these objects and how are they referenced later in case of a block callback.