写这篇博客之前,我得推荐一本书——Objective-C程序设计(第6版)英文版,也就是 Objective-C Programming (Sixth Edition)。
感觉国内关于ObjC的入门书籍要么写的很烂,要么翻译的很烂。而这本书非常好,由浅及深。一定要看英文版,别看中文版。
然后第二点推荐的就是用Mac OS自带的clang编译器在命令行中敲代码编译,这也是我的部门老大给我的建议,在初学的时候去工具化。所以我是用bash command line tool + clang compiler + vim editor. 配好vim后码代码的效果如下所示,全屏的!很炫酷!有木有!
好了,可以开始正文了。
ObjC有个特性就是当你在接口中的变量前面加上关键字@property,并在实现中给这个变量加关键字@synthesize后,系统会自动给你设置好set方法。不过需要注意的是加关键字后变量变成了私有的了。
那么问题来了,如果在父类中被关键字声明的变量x,我要在子类中使用它怎么破?
一开始我直接用x来引用,结果不行。
不过我后来联想到C++,然后使用super.x就可以引用到父类变量了,或者用self.x也行。
具体看代码如下:
#import <Foundation/Foundation.h>
@interface ClassA: NSObject
@property int x;
-(int) getX: (int) d;
@end
@implementation ClassA
@synthesize x;
-(int) getX: (int) d
{
return x;
}
@end
@interface ClassB: ClassA
-(void) print;
@end
@implementation ClassB
-(void) print
{
NSLog(@"%i", super.x); // self.x or super.x is both OK
}
@end
int main(int argc, char *argv[])
{
@autoreleasepool {
ClassB *b = [[ClassB alloc] init];
[b setX: 100];
[b print];
}
return 0;
}