When bringing externally declared variables into a block...
Variables local to the enclosing lexical scope declared with the __block storage modifier are provided by reference and so are mutable.
Any changes are reflected in the enclosing lexical scope, including any other blocks defined within the same enclosing lexical scope.
Local variables declared within the lexical scope of the block, which behave exactly like local variables in a function.
Each invocation of the block provides a new copy of that variable. These variables can in turn be used as const or by-reference variables in blocks enclosed within the block.
Won't you always avoid a costly copy?
No, this is not costly, because solely the variable is copied. The variable is a reference to an object, therefore typically a single machine word.
The referred object itself is not copied.