【问题标题】:How to get good grip on NSMutableDictionary, NSEnumerator, NSMutableSet?如何掌握 NSMutableDictionary、NSEnumerator、NSMutableSet?
【发布时间】:2011-05-27 11:53:15
【问题描述】:

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

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

请帮帮我。

谢谢, 马丹·莫汉。

【问题讨论】:

    标签: iphone objective-c nsmutabledictionary nsenumerator


    【解决方案1】:

    了解这些的最佳方式取决于您之前的经验。 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-loop 枚举它们,因为它们都实现了<NSFastEnumeration>。但有时,您会想做更具体的事情,例如枚举字典的对象(而不是键),或者反向枚举数组。这就是 NSEnumerator 的实例(通常定义为集合对象的属性)将变得有用的地方。

    更新

    cmets中的Justin指出NSEnumerator符合<NSFastEnumeration>;这意味着,您几乎不需要知道如何使用NSEnumerator;您可以在枚举器本身上执行foreach 循环,如下所示:

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

    【讨论】:

    • 最后,一个将NSDictionary 类比为现实词典的答案:)
    • 很高兴你喜欢... :) 我提交的时候有点过激了,但我已经回过头来完成对NSEnumerator的解释。
    • @Jonathan Sterling 即使您必须使用NSEnumerator 对象,它们本身也符合<NSFastEnumeration>,因此知道如何使用它的理由就更少了。
    • @Madan,我想我已经充分解释了这些,并且散布了一些小的代码位。如果您在我的解释之后不理解唯一集和字典的基本概念,那么您的问题将无法通过查看示例代码来解决。至于 Cocoa 枚举器,我建议您不要挂断电话;如果您需要使用一个,到那时您可能会理解它。
    猜你喜欢
    • 2010-11-06
    • 2015-10-27
    • 2011-05-29
    • 1970-01-01
    • 2011-03-21
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多