[−][src]Crate objc_id
Rust smart pointers for Objective-C reference counting.
To ensure that Objective-C objects are retained and released
at the proper times, we can use the Id
struct.
To enforce aliasing rules, an Id
can be either owned or shared; if it is
owned, meaning the Id
is the only reference to the object, it can be mutably
dereferenced. An owned Id
can be downgraded to a ShareId
which can be cloned to allow multiple references.
Weak references may be created using the WeakId
struct.
use objc::runtime::{Class, Object}; use objc_id::{Id, WeakId}; let cls = Class::get("NSObject").unwrap(); let obj: Id<Object> = unsafe { Id::from_retained_ptr(msg_send![cls, new]) }; // obj will be released when it goes out of scope // share the object so we can clone it let obj = obj.share(); let another_ref = obj.clone(); // dropping our other reference will decrement the retain count drop(another_ref); let weak = WeakId::new(&obj); assert!(weak.load().is_some()); // After the object is deallocated, our weak pointer returns none drop(obj); assert!(weak.load().is_none());
Structs
Id | A pointer type for Objective-C's reference counted objects. |
WeakId | A pointer type for a weak reference to an Objective-C reference counted object. |
Enums
Owned | A type used to mark that a struct owns the object(s) it contains, so it has the sole references to them. |
Shared | A type used to mark that the object(s) a struct contains are shared, so there may be other references to them. |
Traits
Ownership | A type that marks what type of ownership a struct has over the object(s)
it contains; specifically, either |
Type Definitions
ShareId | A convenient alias for a shared |