A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 池莉娘子 中级黑马   /  2015-6-30 20:54  /  529 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

self
self时一个指针,它指向方法调用者。两种情况:
1 当self出现在对象方法里,那么它就是指向对象的,用它来调用的方法只能是对象方法。简单说明以下
- (void)run
{
  [self eat];             //写在对象方法里,它调用的eat方法就是对象方法
}
   在这种情况里,还有一种小情况就是用来在对象方法中访问成员变量self->_weight
2 当self出现在类方法里。那它就是指向类的,用它来调用的就是类方法。
+ (void)run
{
        [self eat];        //写在类方法里,它调用的eat就是类方法,对比情况1
}

super
suoer也是一个指针,super一定是在有继承时使用,super所指的就是父类。
使用场合:子类重写父类的方法,但是仍保留父类方法中的一些行为
super的具体使用类似于self
程序演示:
#import <Foundation/Foundation.h>
//父类 zombie
@interface Zombie : NSObject
- (void)walk;
@end
@implementation Zombie
- (void)walk
{
    NSLog(@"往前走一步");
}
@end
//子类 JumpZombie
@interface JumpZombie : Zombie
@end
@implementation JumpZombie
//重写父类方法
- (void)walk
{
    NSLog(@"往前跳一步");
    //调用父类的walk方法
    //注意调用的是父类的类方法还是对象方法,类似与self的判断
    //即取决于super所处的环境,是在类方法里还是对象方法里
    [super walk];//此处调用对象方法
}
@end

int main()
{
    JumpZombie *jz = [JumpZombie new];
    [jz walk];
    return 0;
}

1 个回复

倒序浏览
总结的不错,还有继承
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马