I'd say that the blocks are the same as the regular function pointers in C. From a very general point of view, the main difference is just the symbol caret (^) before the block name instead of the asterisk (*) before the function pointer. Here is a trivial example:
#import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { void (^now)(void) = ^{ NSDate* moment = [NSDate date]; NSLog(@"Now: %@", moment); }; now(); } return 0; }The program output is: [Switching to process 41322 thread 0x0] 2011-11-26 18:07:25.202 block4[41322:707] Now: 2011-11-26 16:07:25 +0000 Program ended with exit code: 0 The following program simply creates and synchronously performs a block: