2
2
extern crate objc;
3
3
4
4
use objc:: Encode ;
5
+ use objc:: rc:: StrongPtr ;
5
6
use objc:: runtime:: { Class , Object } ;
6
7
7
- /// Wrapper around an `Object` pointer that will release it when dropped.
8
- struct StrongPtr ( * mut Object ) ;
9
-
10
- impl std:: ops:: Deref for StrongPtr {
11
- type Target = Object ;
12
-
13
- fn deref ( & self ) -> & Object {
14
- unsafe { & * self . 0 }
15
- }
16
- }
17
-
18
- impl Drop for StrongPtr {
19
- fn drop ( & mut self ) {
20
- let _: ( ) = unsafe { msg_send ! [ self . 0 , release] } ;
21
- }
22
- }
23
-
24
8
fn main ( ) {
25
9
// Get a class
26
10
let cls = class ! ( NSObject ) ;
@@ -36,13 +20,13 @@ fn main() {
36
20
let obj = unsafe {
37
21
let obj: * mut Object = msg_send ! [ cls, alloc] ;
38
22
let obj: * mut Object = msg_send ! [ obj, init] ;
39
- StrongPtr ( obj)
23
+ StrongPtr :: new ( obj)
40
24
} ;
41
- println ! ( "NSObject address: {:p}" , & * obj) ;
25
+ println ! ( "NSObject address: {:p}" , obj) ;
42
26
43
27
// Access an ivar of the object
44
28
let isa: * const Class = unsafe {
45
- * obj. get_ivar ( "isa" )
29
+ * ( * * obj) . get_ivar ( "isa" )
46
30
} ;
47
31
println ! ( "NSObject isa: {:?}" , isa) ;
48
32
@@ -55,7 +39,7 @@ fn main() {
55
39
56
40
// Invoke a method on the object
57
41
let hash: usize = unsafe {
58
- msg_send ! [ obj, hash]
42
+ msg_send ! [ * obj, hash]
59
43
} ;
60
44
println ! ( "NSObject hash: {}" , hash) ;
61
45
}
0 commit comments