五、oc中self与super的基本使用

      

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


   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值