gpt4 book ai didi

objective-c - 在 Objective-C 的子类中访问 protected 实例变量

转载 作者:太空狗 更新时间:2023-10-30 03:33:22 25 4
gpt4 key购买 nike

为什么如果我在 {} 括号之间的 @implementation block 中声明一个变量,尝试访问子类中的变量会产生编译错误?

最佳答案

这取决于您放置实例变量的位置。现代 Objective-C 允许您将它们放在 @interface@implementation 中,或者根本不使用 @synthesize 声明它们并自动合成.

假设我们有一个 A 类:

啊啊

@interface A : NSObject
{
@protected
int i;
}
@end

上午

#import "A.h"

@implementation A
{
@protected
int j;
}
@end

当我们声明一个子类B时,我们导入header,可以看到i的声明,但是由于我们无法导入实现,所以我们无法知道声明j

以下代码在 j 行产生一个错误。

#import "A.h"

@interface B : A
@end

@implementation B
- (int)i {return i;}
- (int)j {return j;}
@end

更新/补充说明

除了在它们自己的文件 (C.m) 中实现类之外,您还可以在单​​个文件中声明多个实现。在这种情况下,这些类可以访问父类(super class)中声明的 @implementation ivars:

C.h

#import "A.h"

@interface C : A
@end

上午

#import "A.h"
#import "C.h"

@implementation A
{
@protected
int j;
}
@end

@implementation C
- (int)j {return j;}
@end

关于objective-c - 在 Objective-C 的子类中访问 protected 实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com