我正在开发一个iPhone应用程序,用于我一直在研究的一些甜蜜的本科研究。可悲的是,我的学校不提供软件工程/设计课程,所以当谈到OO设计的最佳实践问题时,我会做很多阅读。
我的困境:
我的应用程序加载一个视图(v1),在用户的按钮单击后,v1的控制器类执行一个动作方法。此操作方法应使用对象填充数组。之后,用户将再次执行操作或单击其他选项卡以加载另一个视图。应用程序中的其他视图将使用v1填充的数组。
那么,这个共享数组应该在哪里声明?现在,它是在我没有GUI测试功能时的AppDelegate类中。我应该抓住AppDelegate单例并在v1ViewController中添加项目吗?它应该被声明为静态吗?
感谢您的帮助!
^布法罗
编辑:
后续问题:与单身人士互动时,这是更好的交谈方式:
[[MyAwesomeSingleton sharedInstance] gimmeSomePizza];
或
MySingleton *s = [MySingleton sharedInstance];
[s gimmeSomePizza];
我想我想知道的是,你是每次都调用sharedInstance方法,还是定义指向sharedInstance的指针然后引用指针?
答案 0 :(得分:5)
使用app委托来存储在视图和视图控制器之间共享的数据是合理和适当的。
在我的应用程序中,我将应用程序委托视为MVC的控制器部分,UIViews和视图控制器都是“视图”的一部分。我更喜欢使用名为Passive View的MVC变体来保持模型和查看我的应用程序的部分严格隔离,只有连接它们的控制器。
我假设您存储的对象数组是您的应用程序模型,因此将它们存储在您的应用程序委托中是有道理的。正如Daniel D所说,没有必要让它静止。
应用代表真的是您的计划的核心。您可以在-applicationDidFinishLaunching:
方法中创建并初始化模型和视图,并在-applicationWillTerminate:
中保存模型数据和查看状态。当视图控制器接收到更改模型的事件时,您可以调用应用程序委托上的方法来进行更改。
答案 1 :(得分:0)
您可以将其存储在app delegate中的ivar中。您不需要将其设置为静态,因为应用程序委托是一个单例(不会超过1个实例)。
如果应用程序委托变得有点复杂,您可以将数据存储分解为单独的模型对象,或者使用核心数据。