【學習筆記】【OC語言】self關鍵字

1.成員變量和局部變量同名
當成員變量和局部變量同名時,採起就近原則,訪問的是局部變量
用self訪問成員變量,區分同名的局部變量函數

2.使用細節
出現的地方:全部的OC方法中(對象方法\類方法),不能出如今函數
做用
使用 "self->成員變量名" 訪問當前方法調用的成員變量
使用 "[self 方法名];" 來調用方法(對象方法\類方法)工具

3.常見錯誤
低級錯誤:用self去調用函數
類方法中用self調用對象方法,對象方法中用self調用類方法
self死循環spa

4.代碼設計

1.code

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Person : NSObject
 4 {
 5     int _age;
 6 }
 7 
 8 - (void)setAge:(int)age;
 9 - (int)age;
10 
11 - (void)test;
12 
13 @end
14 
15 @implementation Person
16 - (void)setAge:(int)age
17 {
18     // _age = age;
19     self->_age = age;
20 }
21 - (int)age
22 {
23     return self->_age;
24 }
25 
26 - (void)test
27 {
28     // self:指向了方向調用者,表明着當期對象
29     int _age = 20;
30     NSLog(@"Person的年齡是%d歲", self->_age);
31 }
32 
33 @end
34 
35 int main()
36 {
37     Person *p = [Person new];
38     
39     [p setAge:10];
40     
41     [p test];
42     
43     return 0;
44 }

2.對象

 1 #import <Foundation/Foundation.h>
 2 
 3 /*
 4  self的用途:
 5  1> 誰調用了當前方法,self就表明誰
 6  * self出如今對象方法中,self就表明對象
 7  * self出如今類方法中,self就表明類
 8  
 9  2> 在對象方法利用"self->成員變量名"訪問當前對象內部的成員變量
10  
11  2> [self 方法名]能夠調用其餘對象方法\類方法
12  */
13 
14 @interface Dog : NSObject
15 - (void)bark;
16 - (void)run;
17 @end
18 
19 @implementation Dog
20 - (void)bark
21 {
22     NSLog(@"汪汪汪");
23 }
24 - (void)run
25 {
26     [self bark];
27     //NSLog(@"汪汪汪");
28     NSLog(@"跑跑跑");
29 }
30 @end
31 
32 int main()
33 {
34     Dog *d = [Dog new];
35     
36     [d run];
37     
38     return 0;
39 }

3.blog

 1 /*
 2  設計一個計算器類
 3  * 求和
 4  * 求平均值
 5  */
 6 
 7 #import <Foundation/Foundation.h>
 8 
 9 // 工具類:基本沒有任何成員變量,裏面的方法基本都是類方法
10 @interface JiSusnQi : NSObject
11 + (int)sumOfNum1:(int)num1 andNum2:(int)num2;
12 
13 + (int)averageOfNum1:(int)num1 andNum2:(int)num2;
14 @end
15 
16 @implementation JiSusnQi
17 + (int)sumOfNum1:(int)num1 andNum2:(int)num2
18 {
19     return num1 + num2;
20 }
21 
22 + (int)averageOfNum1:(int)num1 andNum2:(int)num2
23 {
24     // 在這種狀況下,self表明類
25     int sum = [self sumOfNum1:num1 andNum2:num2];
26     return sum / 2;
27 }
28 @end
29 
30 int main()
31 {
32     int a = [JiSusnQi averageOfNum1:10 andNum2:12];
33     
34     NSLog(@"a=%d", a);
35     
36 //    JiSusnQi *jsq = [JiSusnQi new];
37 //    
38 //    
39 //    [jsq sumOfNum1:10 andNum2:13];
40     
41     return 0;
42 }

4.使用注意io

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Person : NSObject
 4 - (void)test;
 5 + (void)test;
 6 
 7 - (void)test1;
 8 + (void)test2;
 9 
10 
11 - (void)haha1;
12 
13 + (void)haha2;
14 
15 
16 @end
17 
18 @implementation Person
19 - (void)test
20 {
21     NSLog(@"調用了-test方法");
22     
23     // 會引起死循環
24     //[self test];
25 }
26 
27 + (void)test
28 {
29     NSLog(@"調用了+test方法");
30     
31     // 會引起死循環
32     //[self test];
33 }
34 
35 - (void)test1
36 {
37     [self test]; // -test
38 }
39 
40 + (void)test2
41 {
42     [self test]; // +test
43 }
44 
45 - (void)haha1
46 {
47     NSLog(@"haha1-----");
48 }
49 
50 
51 void haha3()
52 {
53     
54 }
55 
56 + (void)haha2
57 {
58     // haha3();
59     [self haha3];
60     // [self haha1];
61 }
62 @end
63 
64 int main()
65 {
66     [Person haha2];
67     //Person *p = [Person new];
68     
69     //[p test1];
70     return 0;
71 }
相關文章
相關標籤/搜索