Ios 如何访问Objective-C中的受保护变量

Ios 如何访问Objective-C中的受保护变量,ios,objective-c,Ios,Objective C,我希望有一个只对其子类可见的变量,它与Java中的protected变量完全相似 我在家长的实现文件中尝试过这样做 @interface ParentClass (){ NSArray *_protectedVar } 但不幸的是,protectedVar在我调用super.protectedVar 如果我错了,请纠正我的错误,但我不想对该变量使用@properties,因为它会使该变量公开 这是我的子类的头文件,看起来像@interface subclass:ParentClass,如

我希望有一个只对其子类可见的变量,它与
Java
中的
protected
变量完全相似

我在家长的实现文件中尝试过这样做

@interface ParentClass (){
   NSArray *_protectedVar
}
但不幸的是,
protectedVar
在我调用
super.protectedVar

如果我错了,请纠正我的错误,但我不想对该变量使用
@properties
,因为它会使该变量公开

这是我的子类的头文件,看起来像
@interface subclass:ParentClass

,如果你有这个

父类.h

@interface ParentClass : NSObject{
   NSArray *_protectedVar
}
然后,就像访问普通ivar一样,直接使用
\u protectedVar

但我建议您使用带有私有标头的属性

家长

@interface Parent : NSObject

@property id publicProperty;

@end
父母受保护

@interface Parent (Protected)

@property id protectedProperty

@end
所以普通类只导入“Parent.h”,他们看不到受保护的属性。
但是子类可以导入“Parent\u Protected.h”,并将Protected属性与
self.protectedProperty一起使用,您发布的代码在Objective-C类扩展中声明了一个实例变量,因此该变量的默认可见性是
private
。可以使用可见性修改器更改ivar的可见性,如下所示:

@interface ParentClass ()
{
@protected
    NSArray *_protectedVar
}

Objective-C不是Java。它实际上没有“private”或“protected”实例变量,只有由于您不知道它们的名称而无法访问的变量。@Hotlick适用于Objective-C中的方法,但没有实例变量,语言为其提供了以下可见性修饰符:
@private
@protected
@package
@public
@jlehr-这是可以避免的。错误`使用未声明的标识符'\u protectedVar'发生在我这样做时,您必须将该ivar放在主
@接口
.h文件中。错误`方法类型说明符必须以“-”或“+”开头