So, after some thinking, I found the solution: I have to declare a placeholder class inheriting from NSObject, then declare a bunch of function pointers (so it has to be refined a lot!!!). The actual function pointer doing the blocks' job is a function pointer using the return type and arg list plus self of the original block, like this (example code):
#import <Foundation/Foundation.h>
void blck(id _self, NSString *line, BOOL *stop) {
printf("Line: %s\n", [line UTF8String]);
}
@interface BlockPlaceholder: NSObject {
void *block0;
void *block1;
void *block2;
void *block3;
void *block4;
void *block5;
void *block6;
void *block7;
}
@end
@implementation BlockPlaceholder
- (id) init {
self = [super init];
block0 = block1 = block2 = block3 = block4 = block5 = block6 = block7 = blck;
return self;
}
@end
int main() {
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSString *lines = @"This\nis\na\ntext\n";
BlockPlaceholder *block_obj = [[BlockPlaceholder alloc] init];
[lines enumerateLinesUsingBlock:block_obj];
[block_obj release];
[pool release];
return 0;
}
And this one does not crash, and outputs:
Line: This
Line: is
Line: a
Line: text
as expected. :-)