1 #import <Foundation/Foundation.h>
2
3 @interface Person : NSObject
4 {
5 int _age;
6 @private
7 int _fuck;
8 }
9 + (void)test;
10 + (void)test1;
11 - (void)test1;
12 - (void)test;
13 - (void)modify;
14 - (int)age;
15 @end
16
17 @implementation Person
18 + (void)test
19 {
20 [self test1];
21 }
22 + (void)test1
23 {
24 NSLog(@"Called Class Method test1");
25 }
26 - (void)test1
27 {
28 NSLog(@"Called Instance Method test1");
29 }
30 - (void)test
31 {
32 [self test1];
33 }
34
35 - (void)modify
36 {
37 self->_age = 10;
38 self->_fuck = 20;
39 }
40
41 // error 編譯階段就會出錯。
42 //+ (void)modify
43 //{
44 // self->_age = 10;
45 //}
46
47 - (int)age
48 {
49 return _age;
50 }
51
52 - (int)fuck
53 {
54 return _fuck;
55 }
56 @end
57
58 int main() {
59
60 Person *p = [Person new];
61 [p test]; // 輸出 Called Instance Method test1
62 [Person test]; // Called Class Method test1.由以上兩句可知,self指向,其所在方法的調用對象(類也是個對象)。
63 [p modify];
64
65 int a = p.age;
66 int f = p.fuck;
67 NSLog(@"a = %d,f = %d", a, f);
68
69 //[Person modify]; //錯誤,因為self指向的是類對象,而類對象本身并不存在_age這個成員變量。
70
71
72 return 0;
73 }
74
75 /*總結:
self的作用:
76 1.self指針能在對象方法中訪問對象的成員變量。(無論該成員變量的權限是private、protected、public都可以)
2.self指針能調用類方法或對象方法,具體看self指向類對象還是實例對象。
self的編程思想:
1.在方法中想調用其他方法時候。
2.當成員變量與set方法的形參同名時候,如果不想改變成員變量名字。可以用self把成員變量和形參分開。
77 self的使用注意:.self指針指向的是調用當前方法的對象。(類也是對象,叫做類對象)
78 */