#import "ivars-in-blocks.h" typedef int (^my_block_ptr_type) (int); @interface IAmBlocky() { int _hidden_ivar; my_block_ptr_type _block_ptr; } @end @implementation IAmBlocky + (int) addend { return 3; } + (void) classMethod { int (^my_block)(int) = ^(int foo) { int ret = foo + [self addend]; return ret; // Break here inside the class method block. }; printf("%d\n", my_block(2)); } - (void) makeBlockPtr; { _block_ptr = ^(int inval) { _hidden_ivar += inval; return blocky_ivar * inval; // Break here inside the block. }; } - (IAmBlocky *) init { blocky_ivar = 10; _hidden_ivar = 20; // Interesting... Apparently you can't make a block in your init method. This crashes... // [self makeBlockPtr]; return self; } - (int) callABlock: (int) block_value { if (_block_ptr == NULL) [self makeBlockPtr]; int ret = _block_ptr (block_value); [IAmBlocky classMethod]; return ret; } @end