| // Copyright 2010 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/mac/scoped_nsautorelease_pool.h" |
| |
| // Note that this uses the direct runtime interface to the autorelease pool. |
| // https://clang.llvm.org/docs/AutomaticReferenceCounting.html#runtime-support |
| // This is so this can work when compiled for ARC. |
| |
| extern "C" { |
| void* objc_autoreleasePoolPush(void); |
| void objc_autoreleasePoolPop(void* pool); |
| } |
| |
| namespace base::mac { |
| |
| ScopedNSAutoreleasePool::ScopedNSAutoreleasePool() |
| : autorelease_pool_(objc_autoreleasePoolPush()) {} |
| |
| ScopedNSAutoreleasePool::~ScopedNSAutoreleasePool() { |
| DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| objc_autoreleasePoolPop(autorelease_pool_); |
| } |
| |
| // Cycle the internal pool, allowing everything there to get cleaned up and |
| // start anew. |
| void ScopedNSAutoreleasePool::Recycle() { |
| DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| objc_autoreleasePoolPop(autorelease_pool_); |
| autorelease_pool_ = objc_autoreleasePoolPush(); |
| } |
| |
| } // namespace base::mac |