#import /* compile with gcc -g -Wall -framework Foundation -o autounbox autounbox.m */ @interface Receiver : NSObject - (void) printGroovyness: (int)groovy; @end // Receiver @implementation Receiver - (void) printGroovyness: (int)groovy { NSLog (@"Groovy received: %x", groovy); } // printGroovyness @end // Receiver @interface Sender : NSObject @end // Sender @implementation Sender - (void) boxingDay: (Receiver *)receiver { [[NSAutoreleasePool alloc] init]; int value = random() % 300; NSNumber *number = [NSNumber numberWithInt: value]; NSLog(@"main-threading groovy of %d with pointer %p", value, number); [receiver performSelectorOnMainThread: @selector(printGroovyness:) withObject: number waitUntilDone: NO]; sleep(10); } // boxingDay @end // Sender int main (int argc, const char *argv[]) { [[NSAutoreleasePool alloc] init]; Sender *sender = [[Sender alloc] init]; Receiver *receiver = [[Receiver alloc] init]; [NSThread detachNewThreadSelector: @selector(boxingDay:) toTarget: sender withObject: receiver]; // Give the runloop marklar a chance to catch its breath sleep (1); [[NSRunLoop mainRunLoop] run]; return (0); } // main