您的位置:首页 > 其它

五、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一般用于子类想重写父类的方法,但又想保留父类的一些行为。

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: