Vendor things
This commit is contained in:
parent
5deceec006
commit
977e3c17e5
19434 changed files with 10682014 additions and 0 deletions
58
third-party/vendor/objc2/examples/introspection.rs
vendored
Normal file
58
third-party/vendor/objc2/examples/introspection.rs
vendored
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
use objc2::foundation::NSObject;
|
||||
use objc2::runtime::Class;
|
||||
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 Class>::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: {:p}", obj);
|
||||
|
||||
// Access an ivar of the object
|
||||
//
|
||||
// As before, you should not rely on the `isa` ivar being available!
|
||||
let isa = unsafe { *obj.ivar::<*const Class>("isa") };
|
||||
println!("NSObject isa: {:?}", isa);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue