Block objects are a C-level syntactic and runtime feature. They allow you to compose function expressions that that can be passed to API, optionally stored, and used by multiple threads. The function expression can reference and can preserve access to local variables.
You should read this document to learn what blocks are and how you can use them from C, C++, or Objective-C to make your program more efficient and more maintainable.