
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 @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.
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.使用注意
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 }