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文件中。错误`方法类型说明符必须以“-”或“+”开头