1 #import <Foundation/Foundation.h>
2
3 @interface Person : NSObject // 继承了NSObject
4 @property int age;
5 @end
6
7 @implementation Person
8
9
10 - (void)dealloc
11 {
12
13 NSLog(@"Person-dealloc");
14
15 [super dealloc];
16 }
17
18 @end
19
20 int main() {
21
22
23 Person *p = [[Person alloc] init];
24
25 NSUInteger myCount = [p retainCount];
26
27
28 [p retain]; // 2
29
30 [p release]; // 1
31 [p release]; // 0
32
33 p.age = 10; // 如果不打开编译器的检查僵尸对象的选项,这行是不会报错。但逻辑上就是错的。
34
35 p = nil; // nil其实就是0
36
37 [p release]; // 在没有赋值为nil事后,p是野指针。
38 [p release];
39
40 /*
0.僵尸对象:所占用内存已经被回收的对象
41 1.野指针:指向僵尸对象(不可用内存)的指针,称为野指针。给野指针发送消息会报错EXC_BAD_ACCESS
2.空指针:没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错。
42 3..当指针为野指针,必须给野指针赋值为nil。
43
44 */
45 return 0;
46 }
47