------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -----
第一讲 self关键字
本小节知识点:
1、【了解】self和super
2、【了解】self的应用场景
1、self和super
OC提供了两个保留字self和super,用于在方法定义中引用执行该方法的对象。
OC语言中的self,就相当于C++、Java中的this指针。
学会使用self,首先要搞清楚属性这一概念。
以及理解setter(设置器)和getter(访问器)方法,它到底有什么用?
设置器与访问器,提供外界操作类内部属性的一个通道。
假如没有这个方法,外界怎么操作类的内部属性。
假如不提供这两个方法,那么这个属性的值,就不能为外界所改变。
因为类的属性,默认是@protect(受保护类型)。属性一般是私有的。
super发送消息可以将方法实现分发其父类。可以重写一个已有的方法来修饰或将它添加到现有的方法中,仍然可以将原始的方法纳入到修改后的方法中。
2、self的应用场景
1)用在类方法中
2)用在对象方法中
3)访问成员变量
4)self在OC的内存管理特殊使用 //就业班讲解
第二讲 self用在对象方法中
【掌握】self用在对象方法中
1 #import <Foundation/Foundation.h>
2
3 @interface Person : NSObject
4 -(void)run;
5 -(void)eat:(NSString *)foodName;
6 @end
7
8 #import "Person.h"
9
10 @implementation Person
11 -(void)run{
12 NSLog(@"人在走");
13 }
14 -(void)eat:(NSString *)foodName{
15 NSLog(@"人在吃%@",foodName);
16 // Person *p1 = [Person new];
17 // [p1 run];
18 NSLog(@"%p",self);
19 //self在对象方法中使用
20 //self 指代的是调用当前对象方法的那个对象
21 //[p eat:@""]; self指代的就是p
22 [self run];
23 }
24 @end
25
26 #import <Foundation/Foundation.h>
27 #import "Person.h"
28 int main(int argc, const char * argv[])
29 {
30
31 @autoreleasepool {
32 //当前对象p 先吃东西 然后再走(吃和走是同一个对象)
33 Person *p = [Person new];
34 NSLog(@"%p",p);
35 // [p run];
36 [p eat:@"油条+鸡蛋"];
37
38 }
39 return 0;
40 }
41
42 运行结果:
43 2015-12-15 23:25:26.445 OC3-self用在对象方法中[1176:303] 0x100106c60
44 2015-12-15 23:25:26.447 OC3-self用在对象方法中[1176:303] 人在吃油条+鸡蛋
45 2015-12-15 23:25:26.448 OC3-self用在对象方法中[1176:303] 0x100106c60
46 2015-12-15 23:25:26.450 OC3-self用在对象方法中[1176:303] 人在走
第三讲 self用在类方法中
掌握】self用在类方法中
self在类方法中使用其指代的是当前类
1 #import <Foundation/Foundation.h>
2
3 @interface Person : NSObject
4 {
5
6 }
7 +(void)test;
8 +(void)run;
9 -(void)eat;
10 @end
11
12
13 #import "Person.h"
14
15 @implementation Person
16 +(void)test{
17 NSLog(@"+test");
18 }
19 +(void)run{
20 NSLog(@"+人在走!");
21 //self指代的是当前的类,地址是当前的类的地址
22 NSLog(@"self = %p",self); //类方法中的地址 self== Person
23 //使用类调用类方法
24 [self test];
25
26 //此时self不能调用eat
27 //eat是对象方法,而我们self是类
28 // [self eat];
29 }
30 -(void)eat{
31 NSLog(@"正在吃");
32
33 }
34 @end
35
36
37 #import <Foundation/Foundation.h>
38 #import "Person.h"
39 int main(int argc, const char * argv[])
40 {
41
42 @autoreleasepool {
43
44 Person *p = [Person new];
45 //对象的p 地址
46 NSLog(@"p = %p",p);
47 //[p class]返回的实质就是当前类(类对象)
48 NSLog(@"Person = %p",[p class]);
49 //通过Person调用run方法
50 [Person run];
51 }
52 return 0;
53 }
第四讲 self修饰变量
【理解】self修饰变量
self在对象方法中,可以利用self->属性名称的方式访问成员变量
应用场景:当存在局部变量名和成员变量名同名的时候
1 #import <Foundation/Foundation.h>
2
3 @interface Dog : NSObject
4 {
5 int _speed;
6 }
7 -(void)setSpeed:(int)speed;
8 -(int)speed;
9 @end
10
11 #import "Dog.h"
12
13 @implementation Dog
14 -(void)setSpeed:(int)speed{
15
16 //函数内部可以定义和全局变量同名得变量?
17 //如果同名,局部变量会暂时屏蔽全局变量得作用域
18 //局部 局部
19 //speed = speed;
20 _speed = speed;
21
22 // dog self->speed访问得是实例变量
23 //加上self后表示访问得就是类得实例变量
24 //不加self访问得是局部变量
25 //self->speed = speed;
26 }
27 -(int)speed{
28
29 //speed是全局得
30 //全局得没有改变
31 //return speed;
32 return _speed;
33 }
34 @end
35
36 /*
37 set方法书写规范:
38 1)必须以set开头,set后跟的是去掉下划线的实例变量并且首字母大写
39 2)一定有参数
40 3)不能有返回值
41 4)一定是对象方法
42 5)形参名一般是去掉下划线的实例变量
43 6)形参类型和实例变量的类型一致
44 * 7)形参名一般不能和成员变量名相同,如果相同则通过self访问成员变量
45 8)在set方法中一定得给实例变量赋值
46 */
47
48 #import <Foundation/Foundation.h>
49 #import "Dog.h"
50 int main(int argc, const char * argv[])
51 {
52
53 @autoreleasepool {
54
55 Dog *dog = [Dog new];
56
57 [dog setSpeed:80];
58
59 NSLog(@"speed = %d",[dog speed]);
60
61 }
62 return 0;
63 }
第五讲 self使用总结和注意事项
本小节知识点:
1、【理解】self使用总结
2、【理解】self使用注意
1、self使用总结
self 谁调用当前方法,self 就代表谁
self 在对象方法中,self代表当前对象
self 在类方法中,self代表类
[self 方法名称]; 调用其他方法(类方法/对象方法)
self可以简单理解为指自己。
2、self使用注意
同时有对象方法和类方法存在的时候,self不会调错。
原文:http://www.cnblogs.com/xiaokang520/p/5062345.html