cobin/runtime/
ns_object.rs1use 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}