6

我对 Objective-C 相当陌生,想知道管理元组集合的最佳方法是什么。在 CI 中将使用 2D 数组或结构。

我应该创建包含这些元组的对象吗?仅对列表进行排序似乎有点过头了,还是对象初始化没有产生真正的额外负载?

4

3 回答 3

12

对象的生成肯定有一些开销。对于少量对象,使用 ObjC 数据结构仍然是合适的。如果您有大量元组,我会在 C 结构数组中管理它们。请记住,Objective-C 实际上只是 C。在 Objective-C 中使用 C 结构是适当且常见的(在一定程度上;了解这一点是成为优秀 Objective-C 开发人员的一个重要里程碑)。

通常对于这种数据结构,我可能会创建一个管理整个集合的 Objective-C 对象。因此,外部调用者会看到一个 Objective-C 接口,但内部数据将存储在更高效的 C 结构中。

如果快速访问大量元组很常见,我的集合对象可能会提供类似于[NSArray getObjects:range:]. 以“get”开头的 ObjC 方法表示第一个参数是一个将被该方法覆盖的指针。这通常用于对 ObjC 对象管理的事物进行高性能的类 C 访问。

这种数据结构正是 ObjC 开发人员将 ObjC 的优雅和可维护性与 C 的性能和简单性相结合的方式。

于 2009-07-21T14:32:12.427 回答
1

我认为您必须满足于 NSArray 对象的 NSArray ,或者可能是 NSDictionary 对象的 NSArray 。你总是可以推出自己的课程,或者像在 C 中那样做。

于 2009-07-21T11:42:55.837 回答
1

有几种不同的方法可以解决这个问题:

  1. 核心数据。虽然它在技术上不是一个数据库,但它的行为很像一个数据库。如果您不需要应用程序运行之间的持久性,则考虑使用 NSInMemoryStoreType 存储类型,而不是 NSSQLiteStoreType 或其他选项。但是,如果您想将元组连接在一起,则使用 CoreData绝对行不通(IMO,这就是 CoreData不是数据库的主要原因)。
  2. 使用真实的数据库。SQLite 在每台 Mac 和 iPhone 上都提供,如果您使用FMDBSQLite Persistent ObjectsPLDatabaseEGODatabaseGoogle 的 GTMSQLite 包装器之类的包装器,它非常易于使用。
  3. 元组实际上只是键值对的集合,因此您可以只使用 NSMutableDictionaries 的 NSMutableArray。您显然不会使用 SQL 语法,以及您必须自己运行的任何连接/查询,但这绝对是最简单的设置。
  4. 编写一个元组类并将它们存储在 NSMutableArray 中(类似于 #3,只是在元组上强制执行一组通用属性)。
于 2009-07-21T14:17:36.850 回答