diff options
Diffstat (limited to 'base')
-rw-r--r-- | base/scoped_nsautorelease_pool.h | 6 | ||||
-rw-r--r-- | base/scoped_nsautorelease_pool.mm | 11 |
2 files changed, 17 insertions, 0 deletions
diff --git a/base/scoped_nsautorelease_pool.h b/base/scoped_nsautorelease_pool.h index 0e779af..64bf9e7 100644 --- a/base/scoped_nsautorelease_pool.h +++ b/base/scoped_nsautorelease_pool.h @@ -29,10 +29,16 @@ class ScopedNSAutoreleasePool { public: #if !defined(OS_MACOSX) ScopedNSAutoreleasePool() {} + void Recycle() { } #else // OS_MACOSX ScopedNSAutoreleasePool(); ~ScopedNSAutoreleasePool(); + // Clear out the pool in case its position on the stack causes it to be + // alive for long periods of time (such as the entire length of the app). + // Only use then when you're certain the items currently in the pool are + // no longer needed. + void Recycle(); private: NSAutoreleasePool* autorelease_pool_; #endif // OS_MACOSX diff --git a/base/scoped_nsautorelease_pool.mm b/base/scoped_nsautorelease_pool.mm index c4ae517..174fb82 100644 --- a/base/scoped_nsautorelease_pool.mm +++ b/base/scoped_nsautorelease_pool.mm @@ -6,14 +6,25 @@ #import <Foundation/Foundation.h> +#include "base/logging.h" + namespace base { ScopedNSAutoreleasePool::ScopedNSAutoreleasePool() : autorelease_pool_([[NSAutoreleasePool alloc] init]) { + DCHECK(autorelease_pool_); } ScopedNSAutoreleasePool::~ScopedNSAutoreleasePool() { [autorelease_pool_ drain]; } +// Cycle the internal pool, allowing everything there to get cleaned up and +// start anew. +void ScopedNSAutoreleasePool::Recycle() { + [autorelease_pool_ drain]; + autorelease_pool_ = [[NSAutoreleasePool alloc] init]; + DCHECK(autorelease_pool_); +} + } // namespace base |