五、oc中self与super的基本使用
2015-03-11 09:45
281 查看
------- <a href="http://www.itheima.com" target="blank">Windows Phone 7手机开发</a>、<a href="http://www.itheima.com" target="blank">.Ios培训</a>、期待与您交流! -------
我们知道大部分oc关键字都是以@开头的,例如,初学者最常见的几个 @interface @implementation @end 等等,但是self与super是oc中为数不多的,前面不加@的关键字。一般情况下,我们调用一个方法,包括类方法与对象方法,都会采用这样的格式,[方法的执行者 方法名],类方法与对象方法的区别在于,方法执行者的不同,类方法的执行者一般是类名或者说是类对象,而对象方法的执行者,一般是类类型的对象。
self的基本使用,谁调用了当前方法,self就代表谁,self出现在对象方法里则代表了对象,self出现在类方法里面则代表了类。在对象方法中,可以使用self->成员变量来访问当前对象内部的成员变量,而[self 方法名]可以调用其他对象方法或者类方法。
例如:
#import<Foundation/Foundation.h> @interface Tiger : NSObject + (void)eat; + (void)run; @end @implementation Tiger + (void)eat { NSLog(@"The tiger is eating......"); } + (void)run { [self eat]; //用self调用Tiger类的eat方法 NSLog(@"The tiger is running......"); } @end int main(void) { Class s = [Tiger class]; // 创建类对象s,此处的 s==Tiger [s run]; return 0; }
还有需要值得注意的是,不要在方法中再次用self调用自己,这样会引发死循环。
例如:
#import<Foundation/Foundation.h> @interface Fruit : NSObject - (void)test; @end @implementation Fruit - (void)test { NSLog(@"调用了-test方法"); //下面这条语句会引发死循环 [self test]; } @end int main(void) { Fruit *f = [[Fruit alloc] init]; [f test]; return 0; }
除此之外,我们得明白,函数是不依赖对象而存在的,意思就是调用函数的时候,不需要用到类对象或者是类类型的对象。
例如:
#import<Foundation/Foundation.h> @interface Fruit : NSObject - (void)method; @end @implementation Fruit void new() { NSLog(@"调用了new函数"); } - (void)method { new(); // 正确的调用函数的方法 NSLog(@"new----"); //下面这条语句会报错,因为函数是不依赖于对象而存在的,不能用对象来调用函数 //[self new]; } @end int main(void) { Fruit *f = [[Fruit alloc] init]; [f method]; return 0; }
super的作用是,直接调用父类中的某个方法,super处在对象方法中,那么就会调用父类的对象方法,super处在类方法中,那么就会调用父类的类方法。super一般使用在子类重写父类的方法时,想保留父类的一些行为。意思就是需要有继承,才会有super的使用。
例如:
#import<Foundation/Foundation.h> @interface People : NSObject - (void)walk; @end @implementation People - (void)walk { NSLog(@"调用了People的-walk方法"); } @end @interface Adult : People - (void)walk; @end @implementation Adult - (void)walk { NSLog(@"调用了Adult的-walk方法"); [super walk]; //此语句,直接调用父类的中的walk方法 } @end int main(void) { Adult *p = [[Adult alloc] init]; [p walk]; return 0; }
综上所述,self与super都是oc中常用的关键字,是初学者必须掌握好的两个关键字,self用于当前类对象或者类类型对象调用方法,谁调用即谁就是self。super一般用于子类想重写父类的方法,但又想保留父类的一些行为。
相关文章推荐
- 黑马程序员--OC中static,self,super等使用
- OC_self的调用和使用注意,继承的基本使用和使用注意,多态笔记
- ——黑马程序员——OC中self和super关键字的使用
- OC视频笔记2.3(OC继承的使用)2.4(self与super)2.5(方法的重写)
- OC中self和super的使用
- OC的基本使用笔记
- OC-对象方法/类方法/self/super(1)
- 【Objective-C】OC中KVO的基本概念和使用方法
- 【Objective-C】OC中KVO的基本概念和使用方法
- 【Objective-C】OC中自动释放池的基本概念和使用方法
- 黑马程序猿_OC之类方法与对象方法、self与super
- 黑马程序员_OC面向对象的三大特性之封装及OC中类方法和self的使用
- 【Objective-C】OC中自动释放池的基本概念和使用方法
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- 黑马程序员-OC语言中的两个关键字self和super
- OC_Fundation框架定义的一些结构的基本使用
- 【Objective-C】OC中KVO的基本概念和使用方法
- 【Objective-C】OC中对象创建,self,super的详解
- 黑马程序员-我的第十二篇学习日记:OC中空指针,野指针,僵尸对象,retain和release基本使用
- iOS开发OC基础:OC属性的一些概念和基本使用