Module objc2::runtime

source ·
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()
    );
    #[cfg(feature = "malloc")]
    {
        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 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.
  • An object representing any object that implements a specified protocol.
  • A method selector.
  • Failed verifying selector on a class.

Constants

Traits

Type Aliases