super,superClass,class,self这几个关键词在代码中随处可见,虽然我编码中也会经常使用到它们,但实际上并没有真正理解它们的含义。 先创建两个类,一个 Father 类,另一个继承自 Father 的 Son 类。 1、在父类定义一个类方法: ``` + (void)test { NSLog(@"%@, %@, %@, %@",[self class],[self superclass],[super class],[super superclass]); } ``` 然后直接使用 [Father test]调用: 打印结果: Father, NSObject, Father, NSObject 2、接着在子类的 Son .m 中重写父类的test 方法: ``` + (void)test { NSLog(@"%@, %@, %@, %@",[self class],[self superclass],[super class],[super superclass]); } ``` 然后直接使用 [Son test]调用: 打印结果: Son, Father, Son, Father 3、最后将子类的 Son .m 中test 方法改写为: ``` + (void)test { [super text]; /* 子类调用的本方法回到父类的 test 方法中;但同时 super 还是代 表的子类 son; 也就是说在调用父类的 test 的方法时还是子类对象在调用; */ } ``` 然后使用 [Son test]调用: 打印结果: Son, Father, Son, Father 总结: - super:是编译器指示符,仅仅是一个标志,并不是指针,仅仅是标志的当前对象去调用父类的方法,本质还是当前对象调用;super:并不是让父类对象调用方法,调用者还是本身; - class:获取方法调用者的类; - superClass: 获取方法调用者的父类; - self: 代表当前对象;也就是在哪个类里调用了就代表哪个类的对象;
Activity
[-]iOS — 理解super,superClass,class,self的含义[/-][+]理解super,superClass,class,self的含义[/+]