1

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

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

请帮我。

谢谢你,马丹·莫汉。

4

1 回答 1

4

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

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

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

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

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

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

NSEnumerator稍微复杂一点,但通常不需要处理它,除非您正在编写自己的库、正在编写古代码或正在执行复杂的枚举。的子类NSEnumerator由集合类使用,例如NSDictionaryNSArrayNSSet,以允许枚举它们的对象。通常,您只需使用foreach-loop 枚举它们,因为它们都实现了<NSFastEnumeration>. 但有时,您会想做更具体的事情,例如枚举字典的对象(而不是键),或者反向枚举数组。这是NSEnumerator(通常定义为集合对象的属性)的实例将变得有用的地方。

更新

贾斯汀在评论中指出NSEnumerator符合<NSFastEnumeration>;这意味着,您几乎不需要知道如何使用NSEnumerator; 您可以foreach对枚举器本身进行循环,如下所示:

for (id object in [dogDict objectEnumerator]) {
  // doing something with the object, disregarding its key
}
于 2010-12-18T07:08:18.507 回答