@interface Person:NSObject
{
NSString* name;
}
- (void) setName:(NSString*) yourName;
@end
@interface PersonMe:Person
{
NSUInteger age;
}
- (void) setAge:(NSUInteger) age;
- (void) setName:(NSString*) yourName andAge:(NSUInteger) age;
@end
@implementation PersonMe
- (void) setName:(NSString*) yourName andAge:(NSUInteger) age {
[self setAge:age];
[super setName:yourName];
}
@end
int main(int argc, char* argv[])
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; PersonMe* me = [[PersonMe alloc] init];
[me setName:@"asdf" andAge:18];
[me release];
[pool drain]; return 0;
}
self是类的隐藏的参数,指的是当前调用方法的类,另外一个隐藏参数是 _cmd,代表当前类方法的selector。
super并不是隐藏参数,它是一个“编辑器指示符”,它和self指向给的是相同的消息接受者
如上面的代码
[self setAge:age];
[super setName:yourName];
不论是哪个,接收“setName”这个消息的接受者都是PersonMe* me 这个对象,不同的是super告诉编译器,当调用setName这个方法时,要去调用父类的方法,而不是在本类里。
当使用self调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找,
而当使用super时,则直接从父类的方法列表中开始找,然后调用父类的这个方法
本文详细解析了 Objective-C 编程语言中 self 和 super 的工作原理及使用方式,通过具体示例展示了如何利用这两个关键字实现方法调用,并解释了它们之间的区别。
6356

被折叠的 条评论
为什么被折叠?



