@@ -9,12 +9,10 @@ * the packaging of this file. */ #import "OFObject.h" -@class OFMutableArray; - /** * \brief A pool that keeps track of objects to release. * * The OFAutoreleasePool class is a class that keeps track of objects that will * be released when the autorelease pool is released. @@ -21,12 +19,13 @@ * * Every thread has its own stack of autorelease pools. */ @interface OFAutoreleasePool: OFObject { - OFMutableArray *objects; OFAutoreleasePool *next, *prev; + id *objects; + size_t count, size; } /** * Adds an object to the autorelease pool at the top of the thread-specific * stack. @@ -44,10 +43,17 @@ */ - (void)addObject: (OFObject*)obj; /** * Releases all objects in the autorelease pool. + * + * This does not free the memory allocated to store pointers to the objects in + * the pool, so reusing the pool does not allocate any memory until the previous + * number of objects is exceeded. It behaves this way to optimize loops that + * always work with the same or similar number of objects and call relaseObjects + * at the end of the loop, which is propably the most common case for + * releaseObjects. * * If a garbage collector is added in the future, it will tell the GC that now * is a good time to clean up, as this is often used after a lot of objects * have been added to the pool that should be released before the next iteration * of a loop, which adds objects again. Thus, it is usually a clean up call.