黑马程序员技术交流社区

标题: RIDP Note X——双S-SELF & SUPER [打印本页]

作者: RIDP    时间: 2015-9-22 17:47
标题: RIDP Note X——双S-SELF & SUPER
本帖最后由 RIDP 于 2015-9-22 17:48 编辑

         OC中提供了两个保留字self和super,用于在方法定义中引用执行该方法的对象,相当于Java,C++中的this
         
         
         self的应用场景
         
            1)应用于类方法
            2)在对象方法中
            3)访问成员变量
            4)self在OC内存管理中应用
//        [self在对象方法中的使用]
        person *p = [person new];
        [p run];
       [p eat:@"XX"];
        
        
//        如果让他吃完自己执行走的话?
[看person.m]
        
        
//        类方法中
        NSLog(@"test类方法测试地址 %p",[p class]);
        [person test];

         self使用方法总结
         
            [谁调用,就是谁]
            对象方法中self指代当前对象
            类方法  中self指代当前类
         
         self的注意事项
            
            同时有对象方法和类方法存在的时候,self不会调用错误

[这里Person.h就省略了,重点在Person.m上]
——————————————————————
person.m
——————————————————————
@implementation person
-(void)run{
    NSLog(@"人在狂奔");
}
-(void)eat:(NSString *)foodname{
    NSLog(@"人在吃%@",foodname);
//    吃完就走
    [self run];//用self就好
   
}
+(void)test{
    NSLog(@"类方法的测试信息!");
    NSLog(@"此时的self = %p",self);
    [self selftest];
}
+(void)selftest{
    NSLog(@"请用self调用!");
}
@end


————————————————————————————————————
super关键字部分
————————————————————————————————————
         这里讲解super的用法,person类中有eat和run两个方法
         bla为person下属子类,有个不一样的run方法
         
         */
        person *p = [person new];
        [p run];//执行person中的run
        bla *b = [bla new];
        [b run];//执行bla中的run
//        现在我需要在子类中执行一下父类的方法
//        也就是用b对象执行person类中的run,那么就需要在子类方法中调用父类的run
//        在子类中写出的super关键字意思就是调用其父类的同名方法,例如person中的
//        run在bla中就需要用[super run]来调用,此处super指代的就是父类对象

——————
bla.m
——————
@implementation bla
-(void)run{
    NSLog(@"人在一边叨逼叨一边跑");
    NSLog(@"下面是父类方法的调用");

    [super run];//注意这里,使用super调用run,以及,bla是person的子类!这是关键点|执行程序的时候会得到两个输出信息,一个是bla中的run方法,另一个是由[super run]调用的person中的run方法

}
@end







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2