只需为您的类变量创建一个普通的 getter 方法,您就可以在子类中覆盖它。只要记住通过方法访问它。
static SomeClass *gClassVar;
@implementation ClassA
+ (SomeClass *)classVar {
if (!gClassVar)
gClassVar = ...;
return gClassVar;
}
+ (...)someMethod {
[[self classVar] doSomething];
}
@end
然后,
static SomeClass *gClassVar;
@implementation ClassASubclass
+ (SomeClass *)classVar {
if (!gClassVar)
gClassVar = ...;
return gClassVar;
}
@end
因此,当您调用 时[ClassA someMethod]
,它将对 的ClassA
实例进行操作classVar
。当您调用[ClassASubclass someMethod]
时,它将对ClassASubclass
实例进行操作。
将任何类型的变量附加到对象(类或实例)的想法是一种“钉在”Objective C 上的特性。任何时候你想使用 Objective C 做任何面向对象的事情,从使用方法。(几乎)其他一切都只是你可以用方法做的事情的语法糖。
尽管成员变量支持访问控制,但私有/受保护/公共的概念对 Objective C 来说有些陌生。您可以为方法做的最好的事情是在单独的标头中定义它们(如果我们使用方法实现这两者,这适用于类变量和属性)。