home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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
-
- - (void)_setupAutoreleasePool
- {
- autoreleasePool = [[NSAutoreleasePool alloc] init];
- disableCount = 0;
- }
-
- + new
- {
- id poolApplication;
-
- poolApplication = [super new];
-
- [poolApplication _setupAutoreleasePool];
-
- return poolApplication;
- }
-
- /*
- * 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
-