我应该使用什么样的集合类?

时间:2011-04-12 01:07:42

标签: ios objective-c cocoa-touch

目前,我的iPhone应用程序使用NSMutableArrays来保存NSStrings。我有更多信息要与每个数组中的每个条目相关联。例如,以前我只有一件事放在Array1 [0]中,一个字符串。但是,现在,我想要将另一个字符串和一个整数关联起来。我猜是这样的:

old:[string]

new [string,string,integer]

我在考虑使用字典,但我不确定它是否正确。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

NSArray中的元素可以是词典,C structs或Objective-C对象。

字典可以工作,但是如果你要存储原始数据类型值(需要装箱,例如NSNumber),或者有可能在更深层次上扩展数据(包含包含另一个字典的字典),这可能很麻烦字典)。此外,不会隐式键入字典对象。

C struct可以工作,但它也需要装箱,你不会从内存管理的Cocoa集合语义中受益 - 你必须自己做。此外,对copy/retain成员的struct语义没有隐式支持。

我通常为汇总数据类型声明一个Objective-C类,这些类型将存储在NSArray等集合中。在你的情况下,像

@interface MyData : NSObject
@property (nonatomic, copy) NSString *firstString;
@property (nonatomic, copy) NSString *secondString;
@property (assign) NSInteger integer;
@end

答案 1 :(得分:2)

词典是键值对,所以它们不适合这里的法案。您可以使用包含数组的数组,也可以使用包含字符串和整数值的自定义类的数组。

答案 2 :(得分:1)

如果您只想要一个集合并且需要迭代该集合,则选择一个数组。

如果要通过条目索引以外的其他键查找内容,请选择“词典”。

当然,这一般都是一般性的,但你没有表明你需要使用词典的任何理由。

请记住,您可以创建一个包含两个字符串和一个整数的类,并将该类型的对象放入一个数组中。