【學習筆記】【OC語言】self關鍵字,學習筆記ocself
1.成員變數和局部變數同名
當成員變數和局部變數同名時,採取就近原則,訪問的是局部變數
用self訪問成員變數,區分同名的局部變數
2.使用細節
出現的地方:所有的OC方法中(對象方法\類方法),不能出現在函數
作用
使用 "self->成員變數名" 訪問當前方法調用的成員變數
使用 "[self 方法名];" 來調用方法(對象方法\類方法)
3.常見錯誤
低級錯誤:用self去調用函數
類方法中用self調用對象方法,對象方法中用self調用類方法
self死迴圈
4.代碼
1.
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 @end14 15 @implementation Person16 - (void)setAge:(int)age17 {18 // _age = age;19 self->_age = age;20 }21 - (int)age22 {23 return self->_age;24 }25 26 - (void)test27 {28 // self:指向了方向調用者,代表著當期對象29 int _age = 20;30 NSLog(@"Person的年齡是%d歲", self->_age);31 }32 33 @end34 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 : NSObject15 - (void)bark;16 - (void)run;17 @end18 19 @implementation Dog20 - (void)bark21 {22 NSLog(@"汪汪汪");23 }24 - (void)run25 {26 [self bark];27 //NSLog(@"汪汪汪");28 NSLog(@"跑跑跑");29 }30 @end31 32 int main()33 {34 Dog *d = [Dog new];35 36 [d run];37 38 return 0;39 }
3.
1 /* 2 設計一個計算機類 3 * 求和 4 * 求平均值 5 */ 6 7 #import <Foundation/Foundation.h> 8 9 // 工具類:基本沒有任何成員變數,裡面的方法基本都是類方法10 @interface JiSusnQi : NSObject11 + (int)sumOfNum1:(int)num1 andNum2:(int)num2;12 13 + (int)averageOfNum1:(int)num1 andNum2:(int)num2;14 @end15 16 @implementation JiSusnQi17 + (int)sumOfNum1:(int)num1 andNum2:(int)num218 {19 return num1 + num2;20 }21 22 + (int)averageOfNum1:(int)num1 andNum2:(int)num223 {24 // 在這種情況下,self代表類25 int sum = [self sumOfNum1:num1 andNum2:num2];26 return sum / 2;27 }28 @end29 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.使用注意
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 @end17 18 @implementation Person19 - (void)test20 {21 NSLog(@"調用了-test方法");22 23 // 會引發死迴圈24 //[self test];25 }26 27 + (void)test28 {29 NSLog(@"調用了+test方法");30 31 // 會引發死迴圈32 //[self test];33 }34 35 - (void)test136 {37 [self test]; // -test38 }39 40 + (void)test241 {42 [self test]; // +test43 }44 45 - (void)haha146 {47 NSLog(@"haha1-----");48 }49 50 51 void haha3()52 {53 54 }55 56 + (void)haha257 {58 // haha3();59 [self haha3];60 // [self haha1];61 }62 @end63 64 int main()65 {66 [Person haha2];67 //Person *p = [Person new];68 69 //[p test1];70 return 0;71 }