Expand description
Utilities for reference counting Objective-C objects.
The utilities of the rc
module provide ARC-like semantics for working with
Objective-C’s reference counted objects in Rust.
A StrongPtr
retains an object and releases the object when dropped.
A WeakPtr
will not retain the object, but can be upgraded to a StrongPtr
and safely fails if the object has been deallocated.
These utilities are not intended to provide a fully safe interface, but can be useful when writing higher-level Rust wrappers for Objective-C code.
For more information on Objective-C’s reference counting, see Apple’s documentation: https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html
Example
// StrongPtr will release the object when dropped
let obj = unsafe {
StrongPtr::new(msg_send![class!(NSObject), new])
};
// Cloning retains the object an additional time
let cloned = obj.clone();
autoreleasepool(|| {
// Autorelease consumes the StrongPtr, but won't
// actually release until the end of an autoreleasepool
cloned.autorelease();
});
// Weak references won't retain the object
let weak = obj.weak();
drop(obj);
assert!(weak.load().is_null());
Structs
- A pointer that strongly references an object, ensuring it won’t be deallocated.
- A pointer that weakly references an object, allowing to safely check whether it has been deallocated.
Functions
- Execute
f
in the context of a new autorelease pool. The pool is drained after the execution off
completes.