第一篇文章。尝试学习目标 C。我有不错的 OOP 知识。我有一点 C、C++ 和 Java 背景,但生疏。不幸的是,我很难理解一些 Objective C 的概念和语法。
我正在 compileonline 中尝试一些代码,经过一些注释后,我的代码开始工作,但注意到我的方法声明仍然被注释掉了。见initWithName
#import <Foundation/Foundation.h>
@interface cl_person: NSObject
{
NSString* name;
int age;
}
//-(id)init;
//-(id)initWithName: (NSString*)p_name withAge: (int)p_age;
-(void)display;
@end
@implementation cl_person
/*
-(id)init{
return self;
}*/
-(id)initWithName: (NSString*)p_name{
//self = [self init];
name = p_name;
return self;
}
-(id)initWithName: (NSString*)p_name withAge: (int)p_age{
self = [self initWithName: p_name];
age = p_age;
return self;
}
-(void)display{
printf("My name is %s and I am %d years old.", [name UTF8String], age);
}
@end
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
cl_person *o_person = [[cl_person alloc] initWithName: @"Dick" withAge: 25];
[o_person display];
[o_person release];
//NSLog (@"hello world");
[pool drain];
return 0;
}
- 我假设 (id)initWithName 是 NSObject 的一个方法,所以直接实现它意味着覆盖超类的方法。我对么?
- 根据苹果开发文档,选择器是方法签名的一部分——更不用说输入类型和它们的顺序,但这个例子中的一些事情让我感到困惑。为什么即使没有声明,我也允许使用选择器 withAge 实现方法?
抱歉,如果这已经在其他地方介绍过。我进行了快速搜索并浏览了一些可能相关的点击,但没有任何帮助。谢谢!
[NSTotalNoob 发布];