【问题标题】:iOS Application partitioning / MVCiOS 应用程序分区/MVC
【发布时间】:2011-05-04 14:24:23
【问题描述】:

我一直在玩 iOS 开发,现在我想创建一些超越简单应用程序的东西的阶段。但是,我不确定自己是否了解如何正确分区应用程序。

为了简单起见,想象一个(非常)简单的音频播放器应用程序。假设有两个视图控制器,可通过 UITabBarController 访问,该控制器实例化了主 AppDelegate 类。

每个视图控制器都有以下职责:

  1. PlayerViewController - 当用户按下按钮时播放“当前”音频样本的声音播放器。

  2. SelectorViewController - 一个样本选择器,它使用 UIPickerView 显示可用的音频样本,以便用户可以选择他们想要播放的样本。

到目前为止,一切都很好。但是,我不太明白的是我应该将可用样本的数据存储在哪里,以便两个视图都可以找到可用样本的信息,触发样本播放等。

由于两个视图控制器都需要访问这个“模型级别”信息,创建一个“音频管理器”单例类是一种明智的方法,还是有(我猜测的可能性更大)更好的解决方法我忽略了这个问题。

任何指针将不胜感激。

【问题讨论】:

    标签: iphone objective-c model-view-controller ios


    【解决方案1】:

    如果您的数据源位于远程服务器中,并且它以 XML 文件的形式出现在您的应用程序中,您也可以随时使用某种源下载器类获取它。

    这样您就不必关心在不需要时将它们保存在内存中。只需从远程源获取,解析然后释放即可。

    实现这种更谨慎地使用内存的另一种方法是使用 Core Data 从 sqlite 数据库中获取数据。但是有些人认为对于一个简单的应用程序来说太复杂了,他们更喜欢手动运行查询。

    【讨论】:

    • 所有这些都是真的。与问题完全无关,但确实如此。 :-)
    • 好吧,我只是认为没有必要深入了解设计细节,并认为指出解决问题的方法就足够了。
    【解决方案2】:

    我在严肃的应用程序中多次使用过这种模式(单例数据管理器)。它非常简单、易于理解、易于使用,尽管这种模式被 OOP 纯粹主义者所鄙视。

    如果没有人告诉您使用单例是错误的,请继续,请务必查看 Apple 的文档以了解推荐的实现(有很多方法需要重载)。

    哦,顺便说一句,Apple 在 iOS SDK 中经常使用它,所以这是一种常见的做法(请参阅以“共享”开头的类方法)。

    更新:

    另一种可能性是重用已经存在的单例,例如应用程序委托。它可能感觉更干净,或者不是,这更多的是品味问题。它的优点是提供了一个明确的“入口点”,您可以在其中分配/创建/初始化数据管理器。

    【讨论】:

    • 感觉有点奇怪,这是让多个控制器访问相同数据的唯一方法。为需要由多个控制器访问的所有模型创建一个单例只是感觉不对,至少目前是这样。
    • 哦,我没注意到什么。为什么需要在播放器视图中访问整个数据存储?它只需要有它当前正在播放的文件,不是吗?
    • 您有一个单例:[[UIApplication sharedApplication] delegate],您需要将其转换为您的特定 AppDelegate 类型。然后,您可以访问要添加到 AppDelegate 中的属性。
    • @jv42 - 我强烈建议不要为此使用 UIApplicationDelegate。它的目的是协助应用程序范围的事件,如启动、停止和状态转换。将各种共享数据放入其中会导致代码的可重用性降低。
    • 是的,我认为独立的单例会比为此滥用 App Delegate 好得多。不错的选择:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多