Objective-C私有变量继承问题

本文推荐了Objective-C编程入门书籍《Objective-C程序设计(第6版)》并分享了使用MacOS自带编译器clang的经验。解释了@property与@synthesize关键字的作用及在子类中引用父类变量的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    写这篇博客之前,我得推荐一本书——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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值