cobin/runtime/
ns_object.rs

1use crate::{
2  Strong,
3  PrivateMarker,
4  obj::Object
5};
6
7pub trait NSObjectProtocol: Object {
8  unsafe fn release(&self) {
9    msg_send![self, release]
10  }
11}
12
13pub trait NSObjectBase: Object {
14  fn class_name() -> &'static str;
15
16  unsafe fn alloc() -> Strong<Self> {
17    let cls = Self::get_class();
18    let ptr = msg_send![cls, alloc];
19    Strong::new(ptr)
20  }
21
22  unsafe fn new() -> Strong<Self> {
23    let cls = Self::get_class();
24    let ptr = msg_send![cls, new];
25    Strong::new(ptr)
26  }
27
28  unsafe fn get_class() -> &'static objc::runtime::Class {
29    let name = Self::class_name();
30    objc::runtime::Class::get(name).unwrap()
31  }
32}
33
34impl<T: NSObjectBase> NSObjectProtocol for T {}
35
36pub struct NSObject(PrivateMarker);
37
38unsafe impl objc::Message for NSObject {}
39impl Object for NSObject {}
40
41impl NSObjectBase for NSObject {
42  fn class_name() -> &'static str { "NSObject" }
43}