0

我是 cocoa 和 mac os x 开发的新手。我的应用程序的不同组件使用特定位置来存储数据等,该位置在应用程序启动时确定。例如用户主目录中的子目录、系统的临时目录等以及我的可可应用程序中不同类使用的类似运行时信息。此信息应在应用程序启动时确定一次,并在以后重复使用。

每个组件都应该能够访问一个中心组件来获取这些信息,而不是每个组件都一遍又一遍地计算。

可可是否提供了一些地方来保存这些数据?还是我们创建单例对象?有任何想法吗 ?

4

1 回答 1

1

访问共享模型资源的常见模式是通过单例模型控制器类,就像你写的那样。以下是我管理创建/访问单例的方式:

+ (id)sharedInstance {
    static dispatch_once_t once;
    static SomeModelControllerClass * sharedInstance;
    dispatch_once(&once, ^ { sharedInstance = [[self alloc] init]; });
    return sharedInstance;
}

该函数dispatch_once保证由dispatch_once_t标记“once”标识的给定代码块只执行一次。

另一个更重要的问题是如何创建/存储模型控制器将管理的数据。有几个选择:

  1. 全部保存在内存中如果您有少量数据可以一次性保存在内存中,并且在每次应用启动时轻松重新生成,那么这是最简单的方法。不过,这可能不是一个好的用户体验。
  2. NSCoding让你的模型对象实现 NSCoding 协议方法(init/encode withCoder)。您的模型控制器将负责在适当的时间(最好在后台线程上)将模型堆栈写入/读取磁盘。这种技术可确保您的用户在启动时立即看到一些数据,但它要求所有数据在从磁盘读取后都保存在内存中。对于像 Twitter 这样的应用程序来说,这是一种很好的技术,而且他们确实使用了这种技术很多年。
  3. Core Data Core Data 是“鞋盒”风格的应用程序的绝佳选择,这些应用程序需要在本地存储大量数据并且太大而无法一次保存在内存中。它有一个很大的学习曲线和大量的样板,所以如果你不能一次将所有模型对象保存在内存中,我只推荐这个。
  4. 自定义存储有许多第三方框架可以轻松完成 Core Data 所做的事情。它们中的大多数都是基于 SQLite 构建的。探索 Github 以获取吸引您的选项。YapDatabase在我看来是最酷的。
于 2013-07-14T18:16:18.977 回答