首页 > 其他 > 详细

黑马程序员-----self和super关键字的介绍

时间:2015-12-21 01:50:19      阅读:250      评论:0      收藏:0      [点我收藏+]

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -----

 

第一讲  self关键字

 

本小节知识点:

1、【了解】selfsuper

2、【了解】self的应用场景

 

1selfsuper

 OC提供了两个保留字selfsuper,用于在方法定义中引用执行该方法的对象。

 OC语言中的self,就相当于C++Java中的this指针。

 学会使用self,首先要搞清楚属性这一概念。

  以及理解setter(设置器)和getter(访问器)方法,它到底有什么用?

 

 设置器与访问器,提供外界操作类内部属性的一个通道。

 

 假如没有这个方法,外界怎么操作类的内部属性。

 假如不提供这两个方法,那么这个属性的值,就不能为外界所改变。

 因为类的属性,默认是@protect(受保护类型)。属性一般是私有的。

 

 super发送消息可以将方法实现分发其父类。可以重写一个已有的方法来修饰或将它添加到现有的方法中,仍然可以将原始的方法纳入到修改后的方法中。

 

2self的应用场景

  1)用在类方法中

  2)用在对象方法中

  3)访问成员变量

  4selfOC的内存管理特殊使用   //就业班讲解

 

第二讲  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使用注意

 

1self使用总结

   self 谁调用当前方法,self 就代表谁

   self  在对象方法中,self代表当前对象

   self  在类方法中,self代表类

   [self  方法名称];   调用其他方法(类方法/对象方法)

  

   self可以简单理解为指自己。

 

2self使用注意

     同时有对象方法和类方法存在的时候,self不会调错。

黑马程序员-----self和super关键字的介绍

原文:http://www.cnblogs.com/xiaokang520/p/5062345.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!