唯一的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协议?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)