应用程序设计和AppDelegate

时间:2009-04-22 17:11:50

标签: iphone objective-c cocoa-touch

我正在开发一个iPhone应用程序,用于我一直在研究的一些甜蜜的本科研究。可悲的是,我的学校不提供软件工程/设计课程,所以当谈到OO设计的最佳实践问题时,我会做很多阅读。

我的困境:

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

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

感谢您的帮助!

^布法罗

编辑:

后续问题:与单身人士互动时,这是更好的交谈方式:

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 

MySingleton *s = [MySingleton sharedInstance]; 
[s gimmeSomePizza]; 

我想我想知道的是,你是每次都调用sharedInstance方法,还是定义指向sharedInstance的指针然后引用指针?

2 个答案:

答案 0 :(得分:5)

使用app委托来存储在视图和视图控制器之间共享的数据是合理和适当的。

在我的应用程序中,我将应用程序委托视为MVC的控制器部分,UIViews和视图控制器都是“视图”的一部分。我更喜欢使用名为Passive View的MVC变体来保持模型和查看我的应用程序的部分严格隔离,只有连接它们的控制器。

我假设您存储的对象数组是您的应用程序模型,因此将它们存储在您的应用程序委托中是有道理的。正如Daniel D所说,没有必要让它静止。

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

答案 1 :(得分:0)

您可以将其存储在app delegate中的ivar中。您不需要将其设置为静态,因为应用程序委托是一个单例(不会超过1个实例)。

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