The*_*mer 22 cocoa objective-c fast-enumeration
我有一个班级,我希望我的班级确认NSFastEnumeration协议.我已阅读文档,但不是很清楚.有人可以告诉我协议方法应该返回什么以及它是如何工作的?
jus*_*tin 43
Apple的FastEnumerationSample向您展示了该怎么做,但这里有一个细分.
唯一的NSFastEnumeration
方法是countByEnumeratingWithState:objects:count:
返回集合的块.只要需要更多项目就会执行它,直到它通过返回0指示没有更多项目.块作为id
s 的C数组传递.
在该方法中,该state
参数包含您将使用的大部分(如果不是全部)数据.您需要设置state->itemsPtr
和更新state->state
每个单独的调用countByEnumeratingWithState:objects:count:
.以下是每个领域的简要说明NSFastEnumerationState
:
state
:表示迭代序列中的位置.对于索引集合,这将是索引.对于链表,这可以是节点指针.对于其他类型,这可能是更复杂的类型(例如,对于树,state->state
可以是用作存储节点的堆栈的NSMutableArray).当countByEnumeratingWithState:objects:count:
第一次调用时,state->state
为0; 检查此条件以初始化state
结构.itemsPtr
:块中的项目; 指向id
s 的C数组.Cocoa将遍历此数组,依次将每个项绑定到for-in循环中指定的变量.mutationsPtr
:对于可变集合,用于指示自上次调用以来集合已更改countByEnumeratingWithState:objects:count:
.通常,在初始化状态时,您需要设置一次.集合mutators增加了它指向的值.Cocoa会将返回countByEnumeratingWithState:objects:count:
的值与上一次调用的值进行比较; 如果它们不同,Cocoa会抛出异常.extra
:您可以使用它来存储额外的数据.你可以设置state->state
和任何state->extra
你想要的元素; 它们仅为方便起见而提供,并不影响Cocoa.state->itemsPtr
,*state->mutationsPtr
然而,该方法返回的值确实会影响Cocoa.
至于另外两个方法参数,stackbuf
是Cocoa提供的用于保存项目的数组.它的使用是可选的,但如果你不使用它,你将不得不为其分配存储空间state->itemPtr
.如果使用它,state->itemsPtr
请stackbuf
在每次调用时设置为.len
是stackbuf
您可以在其中存储的最大项目数的长度.
进一步阅读:
归档时间: |
|
查看次数: |
6462 次 |
最近记录: |