This is PoolApplication.m in view mode; [Download] [Up]
/* * This Application subclass provides support for NSAutoreleasePools. * If you have an application that uses Foundation but not EOF you * need to make this class your Application class, otherwise your * application will have a lot of serious memory leaks. * * No guarantee is made for the fitness of this code for any particular * use. No warranty expressed or implied. Use at your own risk! * * Randy Tidd * NeXT Premium Developer Support */ #import "PoolApplication.h" @implementation PoolApplication : Application - init { /* * If Application can't init, there must be some problem so we * return nil. */ if( (self = [super init]) == nil) { return nil; } /* * Create the first pool, this will be released before the first event. */ autoreleasePool = [[NSAutoreleasePool alloc] init]; disableCount = 0; return self; } /* * Release the current pool, and create a new one. */ - (void)_releasePool { if(disableCount<= 0) { [autoreleasePool release]; autoreleasePool = [[NSAutoreleasePool alloc] init]; } } /* * Release the current pool before and after every event. */ - sendEvent:(NXEvent *)event { [self _releasePool]; [super sendEvent:event]; [self _releasePool]; return self; } /* * Need to disable the autorelease pool during modal loops otherwise * objects that are involved in the modal loop will be freed prematurely. * We need to have a "disable count" rather than a boolean flag because * we can have nested modal sessions. */ - (int)runModalSession:(NXModalSession *)session { int retVal; disableCount++; retVal = [super runModalSession:session]; disableCount--; return retVal; } - (int)runModalFor:theWindow { int retVal; disableCount++; retVal = [super runModalFor:theWindow]; disableCount--; return retVal; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.