这个SA问题的最高投票答案(Objective C Static Class Level variables)非常清楚地概述了我的问题但是,我想再增加一个标准:
Objective-C不像C ++那样支持类变量。
我想从子类ClassASub访问ClassA的类变量
甚至更好
4A。 我希望ClassA的方法按原样访问类变量,在ClassASub中重写
有什么想法吗?或者这只是将Objective-C弯曲一步太远了?
答案 0 :(得分:1)
只需为类变量创建一个普通的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
实例上运行。
将任何类型的变量附加到对象(类或实例)的想法是一种对目标C“固定”的特性。任何时候你想要使用Objective C做任何面向对象的事情,启动通过使用方法。 (几乎)所有其他东西都只是你可以用方法做的事情的语法糖。
私有/受保护/公共的概念与目标C有些陌生,即使成员变量支持访问控制。你可以为方法做的最好的事情是在一个单独的头文件中定义它们(如果我们同时使用两种方法,这适用于类变量和属性)。