Skip to main content

AutoreleasePool

Struct AutoreleasePool 

Source
pub struct AutoreleasePool { /* private fields */ }
Expand description

An autorelease pool, drained when it goes out of scope.

Objective-C’s convention is that a method returning an object it does not own hands back an autoreleased one — alive until the enclosing pool drains. Cocoa’s own event loop provides that pool; a Rust program has none, so without this every temporary AppKit or UIKit object accumulates for the life of the process. It is not a slow leak: capturing a few hundred frames costs tens of megabytes.

Every entry point here that talks to AppKit or UIKit holds one for the duration of the call. Code that loops over such calls wants its own around the loop as well, so peak memory tracks one iteration rather than all of them.

ⓘ
for frame in 0..600 {
    let _pool = objc::AutoreleasePool::new();
    capture(frame);
}

Implementations§

Source§

impl AutoreleasePool

Source

pub fn new() -> Self

Trait Implementations§

Source§

impl Default for AutoreleasePool

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Drop for AutoreleasePool

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.