你的位置:首页 > 操作系统

[操作系统]【学习笔记】【OC语言】self关键字

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 }