如何很好地掌握NSMutableDictionary,NSEnumerator,NSMutableSet?

时间:2010-12-18 06:51:09

标签: iphone objective-c nsmutabledictionary nsenumerator

我对这三个主题的知识有点落后:NSMutableDictionaryNSEnumeratorNSMutableSet。当我想使用它们时,即使我阅读了开发人员文档,也感觉非常困难。

是否有任何示例代码可以清楚地理解所有这三个主题?

请帮帮我。

谢谢你, Madan Mohan。

1 个答案:

答案 0 :(得分:4)

了解这些的最佳方式取决于您以前的经验。 NSDictionary正如它听起来的那样:一本字典。这意味着给定一个键(或词条,如字典中),您可以查找一个值(或定义):

例如,这本词典提供了有关我的狗的信息:

KEY        VALUE
-------------------------------------------
@"name"       @"tucker"
@"species"    @"canis lupus familiaris"
@"favorite"   @"biscuits"

使用包含该信息的字典dogInfo,我们可以发送[dogInfo objectForKey:@"name"]并希望收到@"tucker"

NSDictionaryNSMutableDictionary之间的区别在于后者允许在初始化后进行更改。这使您可以执行[dogInfo setObject:@"fetch" forKey:@"game"]之类的操作。这有助于维护状态,记忆引用透明请求等。

NSSet是一种拥有一堆对象的方法,有一些重要的位:这些对象没有定义的顺序,每个对象只能有一个(没有重复)。当需要包含唯一的无序对象时,请使用NSSetNSMutableSetNSSet的变体,它允许在初始化后进行更改(例如添加或删除对象)。

NSEnumerator有点复杂,但除非您编写自己的库,正在编写代码或进行复杂的枚举,否则通常不需要处理它。集合类使用NSEnumerator的子类,例如NSDictionaryNSArrayNSSet,以允许枚举其对象。通常,您只需使用foreach循环枚举它们,因为它们都实现了<NSFastEnumeration>。但有时候,你会想要做更具体的事情,比如枚举字典的对象(而不是键),或者反过来枚举一个数组。这是NSEnumerator的实例(通常定义为集合对象上的属性)将变得有用。

更新

贾斯汀在评论中指出NSEnumerator符合<NSFastEnumeration>;这意味着,您需要了解如何使用NSEnumerator的机会几乎是无可挑剔的;你可以在枚举器本身上进行foreach循环,如下所示:

for (id object in [dogDict objectEnumerator]) {
  // doing something with the object, disregarding its key
}