Crate objc [−] [src]
Objective-C Runtime bindings and wrapper for Rust.
Messaging objects
Objective-C objects can be messaged using the msg_send!
macro:
let cls = Class::get("NSObject").unwrap(); let obj: *mut Object = msg_send![cls, new]; let hash: usize = msg_send![obj, hash]; let is_kind: BOOL = msg_send![obj, isKindOfClass:cls]; // Even void methods must have their return type annotated let _: () = msg_send![obj, release];
Reference counting
Objective-C objects are reference counted; to ensure that they 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.
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());
Declaring classes
Objective-C classes can even be declared from Rust using the functionality of
the declare
module.
Modules
declare |
Functionality for declaring Objective-C classes. |
runtime |
A Rust interface for the functionality of the Objective-C runtime. |
Macros
msg_send! |
Sends a message to an object. |
sel! |
Registers a selector, returning a |
Structs
Encoding |
An Objective-C type encoding. |
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
Encode |
Types that have an Objective-C type encoding. |
Message |
Types that may be sent Objective-C messages. For example: objects, classes, and blocks. |
MessageArguments |
Types that may be used as the arguments of an Objective-C message. |
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 |