objective-c – 有谁知道如何实现NSFastEnumeration协议?

objective-c – 有谁知道如何实现NSFastEnumeration协议?,第1张

概述我有一个类,我想让我的类确认NSFastEnumeration协议。我已经阅读了文档,但并不清楚。有人可以告诉我协议方法应该返回什么以及它是如何工作的?提前致谢。 苹果的 FastEnumerationSample显示了你该怎么做,但这是一个故障。 唯一的NSFastEnumeration方法,countByEnumeratingWithState:objects:count :,返回集合的块。只 我有一个类,我想让我的类确认NSFastEnumeration协议。我已经阅读了文档,但并不清楚。有人可以告诉我协议方法应该返回什么以及它是如何工作的?提前致谢。解决方法 苹果的 FastEnumerationSample显示了你该怎么做,但这是一个故障。

唯一的NSFastEnumeration方法,countByEnumeratingWithState:objects:count :,返回集合的块。只要需要更多的项目就执行它,直到它指示没有更多的项目返回0.一个块作为C数组的IDs传递。

在该方法中,状态参数保留大部分(如果不是全部)您将要使用的数据。您将需要设置state-> itemsPtr并更新state->状态,每次单独调用countByEnumeratingWithState:objects:count :.以下是NSFastEnumerationState的每个字段的简要说明:

state:表示迭代中序列中的位置。对于索引的集合,这将是索引。对于链表,这可能是一个节点指针。对于其他类型,这可能是更复杂的类型(例如,对于树状态,状态可以是用作堆栈以存储节点的NSMutableArray)。当countByEnumeratingWithState:objects:count:被调用时,state-> state为0;检查此条件以初始化状态结构。
> itemsPtr:块中的项目;指向C数组的IDs。 Cocoa将循环遍历此数组,依次将每个项目绑定到for-in循环中命名的变量。
> mutationsPtr:对于可变集合,用于指示自上次调用countByEnumeratingWithState以来,集合已更改:objects:count :.通常情况下,您可以在初始化状态时设置一次。收集突变体会增加其指向的值。 Cocoa将比较countByEnumeratingWithState返回的值:objects:count:前一个调用的值;如果它们不同,Cocoa会抛出异常。
> extra:您可以使用它来存储额外的数据。

您可以将state->状态和state的任何元素>设置为任何您想要的内容;它们仅供您方便使用,不影响可可。 state-> itemsPtr,* state-> mutationsPtr和方法返回的值,但是会影响Cocoa。

对于另外两个方法参数,stackbuf是Cocoa提供的一个数组来保存项目。它的使用是可选的,但是如果不使用它,则必须为state-> itemPtr分配存储空间。如果使用它,请在每个调用时将state-> itemsPtr设置为stackbuf。 len是stackbuf的长度,您可以在其中存储的最大项数。

进一步阅读:

> Friday Q&A 2010-04-16: Implementing Fast Enumeration(mikeash.com)
> Implementing countByEnumeratingWithState:objects:count:(可爱与爱)
> NSFastEnumeration Protocol Reference
> Implementing NSFastEnumerator on Custom Class(SO)

总结

以上是内存溢出为你收集整理的objective-c – 有谁知道如何实现NSFastEnumeration协议?全部内容,希望文章能够帮你解决objective-c – 有谁知道如何实现NSFastEnumeration协议?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1039529.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存