58 lines
		
	
	
		
			949 B
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			949 B
		
	
	
	
		
			Objective-C
		
	
	
	
| #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
 | |
| 
 |