I was under the impression that blocks were supposed to resemble first-class functions and allow for lambda calc-style constructs. From a previous question however, I was told they are actually just objects.
Then I have 2 questions really:
Besides the feature of having access to their defining scope, which I guess makes them usable in a way resembling C++ "friendship", why would one go for a block instead of an object then? Are they more lightweight? Because if not I might as well keep passing objects as parameters instead of blocks.
Do blocks have a way of keeping an internal state? for instance, some variable declared inside the block which will retain its value across invocations.