use objc::runtime::Object;
use objc::{class, msg_send, sel, sel_impl};
use objc_id::Id;
#[derive(Debug)]
pub struct AutoReleasePool(pub Id<Object>);
impl AutoReleasePool {
pub fn new() -> Self {
AutoReleasePool(unsafe { Id::from_retained_ptr(msg_send![class!(NSAutoreleasePool), new]) })
}
pub fn drain(&self) {
let _: () = unsafe { msg_send![&*self.0, drain] };
}
pub fn run<F>(handler: F)
where
F: Fn() + 'static
{
let _pool = AutoReleasePool::new();
handler();
}
}
impl Drop for AutoReleasePool {
fn drop(&mut self) {
let _: () = unsafe { msg_send![&*self.0, drain] };
}
}