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 }