1 : // Copyright (c) 2008 The Chromium Authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #ifndef BASE_SCOPED_NSAUTORELEASE_POOL_H_
6 : #define BASE_SCOPED_NSAUTORELEASE_POOL_H_
7 :
8 : #include "base/basictypes.h"
9 :
10 : #if defined(OS_MACOSX)
11 : #if defined(__OBJC__)
12 : @class NSAutoreleasePool;
13 : #else // __OBJC__
14 : class NSAutoreleasePool;
15 : #endif // __OBJC__
16 : #endif // OS_MACOSX
17 :
18 : namespace base {
19 :
20 : // On the Mac, ScopedNSAutoreleasePool allocates an NSAutoreleasePool when
21 : // instantiated and sends it a -drain message when destroyed. This allows an
22 : // autorelease pool to be maintained in ordinary C++ code without bringing in
23 : // any direct Objective-C dependency.
24 : //
25 : // On other platforms, ScopedNSAutoreleasePool is an empty object with no
26 : // effects. This allows it to be used directly in cross-platform code without
27 : // ugly #ifdefs.
28 : class ScopedNSAutoreleasePool {
29 : public:
30 : #if !defined(OS_MACOSX)
31 4258 : ScopedNSAutoreleasePool() {}
32 0 : void Recycle() { }
33 : #else // OS_MACOSX
34 : ScopedNSAutoreleasePool();
35 : ~ScopedNSAutoreleasePool();
36 :
37 : // Clear out the pool in case its position on the stack causes it to be
38 : // alive for long periods of time (such as the entire length of the app).
39 : // Only use then when you're certain the items currently in the pool are
40 : // no longer needed.
41 : void Recycle();
42 : private:
43 : NSAutoreleasePool* autorelease_pool_;
44 : #endif // OS_MACOSX
45 :
46 : private:
47 : DISALLOW_COPY_AND_ASSIGN(ScopedNSAutoreleasePool);
48 : };
49 :
50 : } // namespace base
51 :
52 : #endif // BASE_SCOPED_NSAUTORELEASE_POOL_H_
|