ios - 为什么在子类中看不到继承的实例变量?

标签 ios objective-c inheritance instance-variables

我在 Matt Neuberg 的 iOS Programming Fundamentals 中读到,实例变量是 protected ,这意味着除了这个类的子类之外,其他类看不到它们。

我有一个父类 A,我在其中定义了一个 ivar 列表。 (上午)

@interface A ()

@end

@implementation A
{
     NSArray *list;
}

@end

B 类扩展了 A (B.h)

#import "A.h"

@interface B:A

@end

(B.m)

@interface B ()

@end

@implementation B

list = 
...

@end

我想在子类 B 中使用 ivar 列表,但编译器看不到父类中声明的引用。我已经尝试明确使用 @protected 但这不起作用。我不想在公共(public)界面上公开 ivar 列表。它是一个内部结构,是所有子类的公共(public)元素。我该怎么做?

最佳答案

在类的公共(public)接口(interface)(换句话说,@interface 部分)之外声明的实例变量默认为私有(private)。您可以向声明添加可见性修饰符以更改一个或多个 ivar 的可见性,如下所示:

@implementation A
{
     NSNumber *_ivarWithDefaultVisibility;

@protected
     NSArray *_list;
     NSString *_anotherIvarWithProtectedVisibility;
}

(请注意,根据 Apple 的 Cocoa 编码指南,ivar 名称应以下划线为前缀。)

关于ios - 为什么在子类中看不到继承的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514550/

相关文章:

iphone - 更改 Root View Controller 后,UI 导航在我的 iPhone 应用程序中不起作用

ios - 如何调用 sqlite3_errmsg 以了解 sqlite3_prepare_v2 失败的原因

ios - CLLocationManager - 计算 iPhone 上的实时速度

java - hibernate 继承缓存,CacheKey 中使用的实体名称不正确?

python - 在子类python中调用基类方法

ios - 重大位置变化不会在设备上触发

ios - AVAudioPlayer在播放时崩溃

c++ - 在 C++ 中声明返回字符串的函数

ios - 作为 SubView VS ChildViewController 查看

django - Django多表继承VS在模型中指定明确的一对一关系