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.