我在 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/