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

[操作系统]【学习笔记】【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 }

 

 



福建旅游指南攻略大全福建旅游住哪里比较方便福建旅游住宿攻略福建旅游最佳时间福建自驾游最佳路线东莞汽车站到梦幻百花洲怎样坐车?东莞到东山湖梦幻百花洲坐几路车? 东莞梦幻百花洲电话?2015梦幻百花洲门票多少钱? 坐着地铁三号线 游南京必去的八个美景 2015清明节东莞去哪赏花?东莞清明节踏青赏花去哪里? 2015年开平碉楼油菜花节时间及地点?开平碉楼油菜花节开始时间? 味道河南 照着清单办年货吧 隐贤山庄门票多少钱?东莞常平隐贤山庄最佳旅游时间? 2015东莞隐贤山庄樱花节介绍?隐贤山庄樱花节活动? 南海影视城门票价格?佛山南海影视城怎么收费? 南海影视城图片?佛山南海影视城好玩吗? 南海影视城位置?佛山南海影视城详细地址? 秋季无锡哪里赏花好? 香港哪里可以买到手表?哪里有表行? 去香港买戒指哪里好?香港有哪些珠宝店? 澳门一日游能游览澳门全部景点吗?路线怎么安排? 香港有哪些种类的手表?怎样买到货真价实的手表? AQ12EA5R1CAJME Datasheet AQ12EA5R1CAJME Datasheet 08055G124ZAT2A Datasheet 08055G124ZAT2A Datasheet AQ12EA5R1DAJME Datasheet AQ12EA5R1DAJME Datasheet 延吉市去港澳游 延吉市去港澳游 延吉市去港澳游 大兴安岭参团去香港 大兴安岭参团去香港 大兴安岭参团去香港 牡丹江参团去港澳 牡丹江参团去港澳 牡丹江参团去港澳