我猜这可能是一个愚蠢的初学者问题,但我无法弄清楚它的答案。我在我的iphone应用程序中基本上有两个视图控制器,我希望它们共享第三个类(.m和.h),它们假设保存了两个假设使用的数据。让我们举例说,两个视图都显示位置并呈现一个表格,其中一些信息被操纵 - 我想要做的是拥有第三个类,如引擎,将完成所有这些,而这些视图将只是实例化此引擎并在需要时读取表/位置数据。
我的问题是 - 如何在我的两个视图中实例化此引擎,但实际上只有两个视图读取的引擎副本。我知道当实例化两次时,正在创建两个副本,我不希望这样。我希望这个引擎能够“全球化”。
这在客观c中是否可行?什么是最好的方法呢?
非常感谢你们。
答案 0 :(得分:2)
您可以考虑向指向模型(“引擎”)对象的两个视图控制器添加@property
。创建视图控制器后,您可以将@property
设置为指向模型。如果@property
为retain
,则不会复制模型。
答案 1 :(得分:1)
由于你只有这些“发动机”中的一个,我建议采用单身路线。
创建一个静态方法,将实例返回到您想要共享的对象,然后您可以在每个类中使用该方法。
原谅我的语法......我没有在我面前提出我的客观C语言,但基本上你会想做类似以下的事情。
EngineClass.h file:
STATIC EngineClass * getSingleton();
STATIC EngineClass * INSTANCE;
EngineClass.m file:
STATIC EngineClass * getSingleton()
{
if(INSTANCE == null)
{
INSTANCE = new EngineClass();
}
return INSTANCE;
}
答案 2 :(得分:1)
在这方面你有很多选择。遵循MVC方法,您将走上正确的道路,因为您应该拥有此数据的单个副本(模型)。你如何得到你的视图控制器取决于你。我会给出两种方式,你可以看到哪种方式在你的情况下效果更好,但不仅仅是方法。选项1)创建一个单例来容纳您的模型/数据。你可能在使用像... = [SomeController sharedInstance]这样的东西时在SDK中看到了这个。两个视图控制器可以只使用该共享实例。选项2)您可以在启动时将模型实例化,并将其直接传递给视图控制器。是否是单身人士不是他们关心的问题。他们只知道他们可以访问一些数据。您可以为每个视图控制器创建@property(非原子,保留)TheData * theData等属性,并以这种方式传递。