【问题标题】:Example of adopting/implementing fast enumeration for my class?为我的班级采用/实施快速枚举的示例?
【发布时间】:2012-06-07 15:52:24
【问题描述】:

我试图了解如何为我正在创建的类采用快速枚举协议(在 iOS/objective C 下)。我阅读了 Apple 文档的部分,但是……我不太明白!

谁有一些示例代码我可以看看?

我正在尝试做的事情:我有一个对象数组,我希望发送者对其进行迭代。发件人想要使用 for-in 构造。问题是我不希望发送者看到 all 数组中的对象,因为其中一些对象在应用程序的上下文中无效。

换句话说,我希望我的迭代器返回数组中符合特定条件的对象子集。

我不希望在此过程中创建任何 数组,以免拖慢速度。

【问题讨论】:

    标签: objective-c fast-enumeration


    【解决方案1】:

    Apple 自己的FastEnumerationSample 很好地证明了这一点。从它的声音来看,你可能还没有看到它。

    还有this blog post

    【讨论】:

    • 太棒了!是的,我没见过。谢谢!
    • 那篇博文在技术上非常准确,但写得很糟糕。它在你不需要知道的事情上跳来跳去,显示你不应该做的事情,大量掩盖你确实需要知道的事情。 Mike Ash 的帖子通常质量要高得多 :(。我已经阅读了很多次,但仍然难以理解 - 我建议不要打扰。最好在 Apple 源代码中破解,直到你能猜出理解它的方式。
    【解决方案2】:

    这里有更好的解释:

    http://www.cocoawithlove.com/2008/05/implementing-countbyenumeratingwithstat.html

    注意:Apple 的源代码在技术上是正确的,但解释得很差,而且基本上没用,除非你喜欢玩“猜猜程序员那天在想什么/抽烟”。

    Liekwise,Mike Ash 的帖子是正确的,并且在你知道如何做之后很有用,但作为一个起点很糟糕。

    【讨论】:

      【解决方案3】:

      我不知道您所说的“发件人想要使用 for-in 构造”是什么意思。使用 indexOfObjectsPassingTest: 可能会更好地实现您要求的结果,这将为您提供数组中通过您为其设置的任何测试的所有项目的索引集。

      您也可以使用 filteredArrayUsingPredicate: 来派生一个新数组,该数组是原始数组的子集——我知道您说过您不想创建任何新数组,但如果您想返回数组的子集,那么你必须创建一个新数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-10
        • 2014-03-17
        • 1970-01-01
        • 1970-01-01
        • 2020-05-19
        相关资源
        最近更新 更多