如何在可以在类方法中使用的类中存储属性?

时间:2012-03-30 04:00:14

标签: iphone objective-c ios

我是iOS和Objective-C的新手,我已经知道在一个类中,你定义的类的属性只能在该类的“实例”中启动。

但Objective-C中是否有任何机制可以存储一些可以在类的类方法中使用的数据?

具体来说,我正在开发一个安静简单的RPN计算器应用程序。

根据斯坦福iOS编程开发(CS193P)的教程,我创建了名为RPNCalculatorBrain的RPN计算器控制器模型,并且有一个属性(id)program和一个类方法+(double)runProgram:(id)program

(id)program本质上是一个包含用户输入的所有操作数和操作的数组。

该类中的讲师建议使用类方法,以便其他类(在此程序的情况下,functionGraphMVC)可以将(id)program传递给此类方法并获取程序(或函数)的结果。这样模型RPNCalculatorBrain可以尽可能通用。

还有另一个类方法+(double)runProgram:(id) program using:(NSDictionary*)variableValues。它是上述类方法的可变版本。因此,如果id(program)中有变量(X,a,b),则此类方法可以使用(NSDictionary *)variableValues来解释变量的值。

但我个人想改进这个方法,我只是想知道我是否可以在我的模型(CalculatorBrain)中存储Calculator的特殊操作(π,e)和变量(x),并给出一个类方法{{1}无论谁想要使用它。所以我可以在我的模型中存储有关计算的所有内容但据我所知,我无法存储可用于类方法的东西。

在NSUserDefault中存储此信息似乎不合适,我还没有阅读有关核心数据的文档。

我知道我的想法似乎是一种轻微的陌生和幼稚,我当然可以使用一些替代方法来做同样的工作,但我只是想知道它是否可行。谢谢!

如果我的描述让你们感到困惑,请原谅我!我的英文写作是......

1 个答案:

答案 0 :(得分:1)

通常的方法是在类的实现文件中创建一个静态全局变量,然后在+initialize类方法(see this question)中初始化它,或者在类似的东西中懒惰地初始化它到类级属性访问器。

但是,您描述的设计几乎所有内容都值得怀疑。如果您确实需要具有状态的全局可访问对象,则可以实现Singleton模式。即使这样,依赖注入也是一种更好的方法,因此您不必将自己与一个具体的实现结合起来。