应用程序设计和AppDelegate

Buf*_*alo 4 iphone cocoa-touch objective-c

我正在开发iPhone应用程序,用于我一直在从事的一些不错的本科生研究。可悲的是,我所在的学校不提供软件工程/设计课程,因此,当涉及到面向对象设计的最佳实践问题时,我会进行大量阅读。

我的困境:

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

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

谢谢您的帮助!

^水牛城

编辑:

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

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 
Run Code Online (Sandbox Code Playgroud)

要么

MySingleton *s = [MySingleton sharedInstance]; 
[s gimmeSomePizza]; 
Run Code Online (Sandbox Code Playgroud)

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

Don*_*hey 5

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

在我的应用程序中,我将应用程序委托视为MVC的控制器部分,而UIViews和视图控制器均属于“视图”的一部分。我更喜欢使用一种称为Passive View的MVC变体,该模型将模型和视图的应用程序部分严格隔离,仅通过连接它们的控制器进行隔离。

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

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