2009-04-22 64 views
3

我正在开发一个iPhone应用程序,用于我一直在研究的一些甜蜜的本科生研究。可悲的是,我的学校没有提供软件工程/设计课程,所以当涉及面向对象设计的最佳实践问题时,我会进行大量的阅读。应用程序设计和AppDelegate

我的困境:

我的应用程序加载的图(V1),其中,当用户的按钮点击时,V1的控制器类执行操作方法。此操作方法应该使用对象填充数组。之后,用户将再次执行该操作,或者单击不同的选项卡以加载另一个视图。应用程序中的其他视图将使用v1填充的数组。

那么,这个共享数组应该在哪里声明呢?现在,它在AppDelegate类中,从我测试没有GUI的功能开始。我应该抓住AppDelegate单例并在v1ViewController中添加项目吗?它应该被声明为静态的吗?

感谢您的帮助!

^布法罗

编辑:

后续问题:

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 

MySingleton *s = [MySingleton sharedInstance]; 
[s gimmeSomePizza]; 
:当一个单身,这是更好的方式来与它对话互动

我想我想知道的是,你每次做的sharedInstance方法调用或做y ou定义一个指向sharedInstance的指针,然后引用指针?

回答

4

使用应用程序委托存储在视图和视图控制器之间共享的数据是合理且恰当的。

在我的应用程序中,我将应用程序委托视为MVC的控制器部分,UIViews和视图控制器都是“视图”的一部分。我更喜欢使用称为Passive View的MVC变体,该模型使得我的应用程序的模型和视图部分与仅连接它们的控制器严格隔离。

我假设你存储的对象数组是你的应用程序的模型,因此将它们存储在你的应用程序委托中是有意义的。正如Daniel D所说,没有必要把它变成静态的。

应用程序代表真的是你的程序的核心。在-applicationDidFinishLaunching:方法中创建并初始化模型和视图,并将模型数据和视图状态保存在-applicationWillTerminate:中。当视图控制器接收到更改模型的事件时,可以调用应用程序委托中的方法来进行这些更改。

+0

后续问题: 当一个单身,这是更好的方式来与它对话互动: [MyAwesomeSingleton sharedInstance] gimmeSomePizza]。 或 MySingleton * s = [MySingleton sharedInstance]; [s gimmeSomePizza]; 我想我想知道的是,你每次做的sharedInstance方法调用,或者你定义一个指向sharedInstance的指针,然后引用指针? – Buffalo 2009-04-24 20:46:52

0

您可以将它存储在应用程序代理的ivar中。无论如何,您无需将其设置为静态,因为应用程序委托无论如何都是单身人士(永远不会超过1个实例)。

如果应用程序委托变得有点复杂,则可以将数据存储分解为单独的模型对象或可能使用核心数据。