According to the Concurrency Programming guide:
When blocks are added to a dispatch queue, these values must typically be left in a read-only format. However, blocks that are executed synchronously can also use variables that have the __block keyword prepended to return data back to the parent’s calling scope.
I have been altering variables created outside the queue, but I have never specified them with __block so I'm wondering just exactly when or why this is needed. Or is it that instance variables are always inherently alterable by blocks, as if they have __block assigned to them from behind the scenes?
Update: I should add too that I am using asynchronous queues, while the above says that variables can be altered only in synchronous queues (with __block)