黑马程序员-OC语言-关键字self与super
2015-12-19 15:38
519 查看
——- ios培训、ios培训、期待与您交流! ———-
self的基本用法
self 可以在类中用来表示调用者,去调用方法.或属性.
注意: 当self调用属性时,只在对象方法中.因为类方法中不能用属性.
self调用属性,只表示类的对象.
self的规则
1,实例方法里面的self,是对象的首地址。
2,类方法里面的self,是Class.
尽管在同一个类里面的使用self,但是self却有着不同的解读。在类方法里面的self,可以翻译成class self;在实例方法里面的self,应该被翻译成为object self。在类方法里面的self和实例方法里面的self有着本质上的不同,尽管他们的名字都叫self。
代码体现
关于self的一些思考
1.无论怎么样,self都是代表调用者,在类方法中使用,self就表示一个类,在对象方法中使用,self就表示一个对象.
2.self不能再主函数中出现,在主函数中调用方法时,必须使用创建的一个对象或者类来调用方法.
3.不要在方法中用self调用方法本身,这样会产生死递归:方法自已调用自已,容易引起死循环.
4.在类方法中可以通过创建一个对象来调用对象方法,但是这个对象不能用self来替代,因为在类方法中self只能代表一个类.
super的基本用法
super是一个关键字.
可以在子类中调用父类中被重写的方法.
调用方法:[super 方法名];
比如我们常见的构造方法中:
以上[super init]就是调用了父类NSObject中的方法init; 因为init在子类中被重写了,所以想要调用父类中的init方法,必须用super.
super的特点
1.只能类方法调用类方法,对象方法中调用对象方法;
2.不建议用super调用父类中没有被重写的方法,可以直接用self调用,不能调用属性,只能调用方法.
代码体现
关于super的一些思考
1.super是调用父类的方法的关键字,所以类的继承是使用super的前提.
2.属性不能用super.因为子类不能重写父类的属性.
3.super在类方法中代表是一个类,在对象方法中代表的是一个对象,这一点与self是一致的.
self的基本用法
self 可以在类中用来表示调用者,去调用方法.或属性.
注意: 当self调用属性时,只在对象方法中.因为类方法中不能用属性.
self调用属性,只表示类的对象.
self的规则
1,实例方法里面的self,是对象的首地址。
2,类方法里面的self,是Class.
尽管在同一个类里面的使用self,但是self却有着不同的解读。在类方法里面的self,可以翻译成class self;在实例方法里面的self,应该被翻译成为object self。在类方法里面的self和实例方法里面的self有着本质上的不同,尽管他们的名字都叫self。
代码体现
#import <Foundation/Foundation.h> @interface Person : NSObject{ char *_name; } -(void)setName:(char *)name; -(void)smile; -(void)talk; +(void)haha; +(void)haha2; @end @implementation Person -(void)setName:(char *)name{ _name=name; } +(void)haha{ NSLog(@"haha..很开心.."); //self->_name;//错误,不能在类方法中访问属性 } +(void)haha2{ //在类方法中,表示的是类 [self haha]; NSLog(@"haha222..很开心.."); } -(void)smile{ char *_name="fred"; //self表示调用这个方法的对象.而对象->name.这个取的是属性. NSLog(@"哈哈..很开心..%s",self->_name); } -(void)talk{ //self:表示调用者. [self smile];//如果self是在对象方法中,则表示这个类的对象. NSLog(@"%s讲了一个笑话..",_name); } @end int main(){ Person *p=[Person new]; [p setName:"judy"]; [p smile]; [Person haha]; // Person *p1=[Person new]; // [p1 talk]; // [Person haha2]; return 0; }
关于self的一些思考
1.无论怎么样,self都是代表调用者,在类方法中使用,self就表示一个类,在对象方法中使用,self就表示一个对象.
2.self不能再主函数中出现,在主函数中调用方法时,必须使用创建的一个对象或者类来调用方法.
3.不要在方法中用self调用方法本身,这样会产生死递归:方法自已调用自已,容易引起死循环.
4.在类方法中可以通过创建一个对象来调用对象方法,但是这个对象不能用self来替代,因为在类方法中self只能代表一个类.
super的基本用法
super是一个关键字.
可以在子类中调用父类中被重写的方法.
调用方法:[super 方法名];
比如我们常见的构造方法中:
-(id)initWithName:(NSString*) name{ if(self=[super init]){ self.name=name; } return self; }
以上[super init]就是调用了父类NSObject中的方法init; 因为init在子类中被重写了,所以想要调用父类中的init方法,必须用super.
super的特点
1.只能类方法调用类方法,对象方法中调用对象方法;
2.不建议用super调用父类中没有被重写的方法,可以直接用self调用,不能调用属性,只能调用方法.
代码体现
#import <Foundation/Foundation.h> //父类 @interface Person : NSObject{ char *_name;//姓名 double _high;//身高 double _weight;//体重 } -(void)run; -(void)setName:(char *)name; +(void)eat; @end @implementation Person -(void)run{ NSLog(@"父类的方法...跑...."); } -(void)setName:(char *)name{ _name=name; } +(void)eat{ NSLog(@"父类的...吃...."); } @end //子类警察 @interface Police : Person{ char *_qiang; } -(void)run; +(void)catchThief; @end @implementation Police //重写了:对象会调用子类自已的同名方法 -(void)run{ NSLog(@"子类...警察拿着枪跑...."); [super run];//代表调用父类的同名方法. // [super eat];错误的,不能在对象方法中调用父类的类方法 } +(void)catchThief{ NSLog(@"抓小偷..."); //[super eat];//如果子类没有重写父类的方法,没有必要用super. [self eat]; } @end int main(){ Police *p =[Police new]; [p run]; //[Police catchThief]; }
关于super的一些思考
1.super是调用父类的方法的关键字,所以类的继承是使用super的前提.
2.属性不能用super.因为子类不能重写父类的属性.
3.super在类方法中代表是一个类,在对象方法中代表的是一个对象,这一点与self是一致的.
相关文章推荐
- #无私分享《传智播客2011版。net平台c#视频》全套哦30.7G
- 黑马程序员---Java面向对象编程思想小结
- 黑马程序员---java面向抽象/接口编程
- 黑马程序员---java单例设计模式
- 黑马程序员---java字符串常用类
- 黑马程序员宣传语征集大赛
- 黑马程序员-------关于今天的一个程序学习心得
- 黑马程序员----把Eclipse修改为黑色主题颜色方案
- c基础语法(一)---流程控制与函数
- C基础语法(二)---复杂数据类型(数组和字符串)
- C基础语法(三)---复杂数据类型(指针)
- OC基础语法(三)---核心语法(1)
- OC基础语法(四)---核心语法(2)
- OC基础语法(五)---内存管理
- OC基础语法(六)---内存管理(二)
- OC基础语法(七)---Foundation框架
- 黑马程序员
- 程序员常用英语大集合 http://bbs.itheima.com/thread-118950-1-1.html (出处: 黑马程序员IT技术论坛)
- IO(输入输出流) 4000
- 黑马程序员_多线程(1)