swift_rs/autorelease.rs
1/// Run code with its own autorelease pool. Semantically, this is identical
2/// to [`@autoreleasepool`](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html)
3/// in Objective-C
4///
5///
6/// ```no_run
7/// use swift_rs::autoreleasepool;
8///
9/// autoreleasepool!({
10/// // do something memory intensive stuff
11/// })
12/// ```
13#[macro_export]
14macro_rules! autoreleasepool {
15 ( $expr:expr ) => {{
16 extern "C" {
17 fn objc_autoreleasePoolPush() -> *mut std::ffi::c_void;
18 fn objc_autoreleasePoolPop(context: *mut std::ffi::c_void);
19 }
20
21 let pool = unsafe { objc_autoreleasePoolPush() };
22 let r = { $expr };
23 unsafe { objc_autoreleasePoolPop(pool) };
24 r
25 }};
26}