【问题标题】:Application Design and AppDelegate应用程序设计和 AppDelegate
【发布时间】:2011-12-04 07:46:30
【问题描述】:

我正在为我一直在从事的一些甜蜜的本科研究开发一个 iPhone 应用程序。遗憾的是,我的学校不提供软件工程/设计课程,所以当涉及到 OO 设计的最佳实践问题时,我会阅读大量资料。

我的困境:

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

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

感谢您的帮助!

^布法罗

编辑:

后续问题:与单例交互时,与它交谈的更好方式是:

[[MyAwesomeSingleton sharedInstance] gimmeSomePizza]; 

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

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

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 后续问题:与单例交互时,与单例交互的更好方式是:[[MyAwesomeSingleton sharedInstance] gimmeSomePizza];或 MySingleton *s = [MySingleton sharedInstance]; [给我一些披萨];我想我想知道的是,您是每次都调用 sharedInstance 方法还是定义一个指向 sharedInstance 的指针然后引用该指针?
    • 任何一种方式都可以。一般来说,两者之间没有可检测到的性能差异。选择让您更好地阅读的方法。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2021-02-26
      • 2012-08-11
      • 2011-03-11
      • 1970-01-01
      相关资源
      最近更新 更多