I allocate an object Foo on the main thread. Then I spin off a secondary thread and give it a long task to do there, but immediately release the object, on the main thread. I expect that the -release invoke -dealloc immediately, on the main thread. To my amazement, the object is not deallocced until the task is finished, and to my further amazement, the dealloc method runs on the secondary thread.
Someone please enlighten me. This is Mac OS 10.6.3, Objective-C garbage collection = unsupported. Jerry Krinock #import <Cocoa/Cocoa.h> @interface Foo : NSObject { } @end @implementation Foo - (void)sleep5 { NSLog(@"Sleeping for 5 on secondary thread") ; sleep(5) ; } - (void)dealloc { [super dealloc] ; NSLog(@"Did dealloc a Foo") ; } @end int main(int argc, char *argv[]) { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init] ; Foo* foo = [[Foo alloc] init] ; [NSThread detachNewThreadSelector:@selector(sleep5) toTarget:foo withObject:nil] ; [foo release] ; sleep(10) ; NSLog(@"Terminating") ; [pool release] ; return 0 ; } RESULT: 10:23:00.879 LittleTool[83071:1103] Sleeping for 5 on secondary thread 10:23:05.884 LittleTool[83071:1103] Will dealloc a Foo 10:23:05.885 LittleTool[83071:1103] Did dealloc a Foo 10:23:10.879 LittleTool[83071:80f] Terminating _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com