Expand description
§Direct runtime bindings.
This module contains safe(r) bindings to common parts of the Objective-C
runtime. See the ffi
module for details on the raw
bindings.
§Example
Using features of the runtime to query information about NSObject
.
use objc2::runtime::{AnyClass, NSObject};
use objc2::{sel, ClassType, Encode};
fn main() {
// Get the class representing `NSObject`
let cls = NSObject::class();
// Inspect various properties of the class
println!("NSObject superclass: {:?}", cls.superclass());
println!("NSObject size: {}", cls.instance_size());
println!(
"-[NSObject alloc] would work: {}",
cls.responds_to(sel!(alloc))
);
println!(
"+[NSObject alloc] would work: {}",
cls.metaclass().responds_to(sel!(alloc))
);
// Inspect an instance variable on the class
//
// Note: You should not rely on the `isa` ivar being available,
// this is only for demonstration.
let ivar = cls
.instance_variable("isa")
.expect("No ivar with name 'isa' found on NSObject");
println!(
"Instance variable {} has type encoding {:?}",
ivar.name(),
ivar.type_encoding()
);
assert!(<*const AnyClass>::ENCODING.equivalent_to_str(ivar.type_encoding()));
// Inspect a method of the class
let method = cls.instance_method(sel!(hash)).unwrap();
println!(
"-[NSObject hash] takes {} parameters",
method.arguments_count()
);
let hash_return = method.return_type();
println!("-[NSObject hash] return type: {hash_return:?}");
assert!(usize::ENCODING.equivalent_to_str(&hash_return));
// Create an instance
let obj = NSObject::new();
println!("NSObject address: {obj:p}");
// Read an ivar on the object
let isa: *const AnyClass = unsafe { *ivar.load(&obj) };
println!("NSObject isa: {isa:?}");
}
Structs§
- A type that represents an Objective-C class.
- An Objective-C object.
- A type that represents an Objective-C protocol.
- The Objective-C
BOOL
type. - A type for declaring a new class and adding new methods and ivars to it before registering it.
- A type that represents an instance variable.
- A type that represents a method in a class definition.
- The root class of most Objective-C class hierarchies.
- A type used to identify and manage memory zones.
- A type for declaring a new protocol and adding new methods to it before registering it.
- An object representing any object that implements a specified protocol.
- A method selector.
- Failed verifying selector on a class.
Constants§
Traits§
- An internal helper trait for
ProtocolObject
. - Types that can directly be used as the receiver of Objective-C messages.
- Types that can be used as the implementation of an Objective-C method.
- The methods that are fundamental to most Objective-C objects.