我有一個班,我希望我的班級確認NSFastEnumeration協議。我已閱讀文檔,但它並不十分清楚。有人可以告訴我協議方法應該返回什麼以及它是如何工作的?提前致謝。有誰知道如何實現NSFastEnumeration協議?
回答
蘋果的FastEnumerationSample顯示你該做什麼,但這裏有一個細分。
唯一的NSFastEnumeration
方法countByEnumeratingWithState:objects:count:
返回集合的塊。只要需要更多的項目,它就會被執行,直到它通過返回0表示沒有更多的項目。塊將作爲C的數組傳遞給id
s。
在該方法中,state
參數包含您將使用的大部分(如果不是全部)數據。您需要設置state->itemsPtr
並更新state->state
,每次單獨調用countByEnumeratingWithState:objects:count:
。下面是NSFastEnumerationState
每個字段的簡短說明:
state
:代表序列中的位置上迭代。對於索引集合,這將是索引。對於鏈接列表,這可能是一個節點指針。對於其他類型,這可能是一個更復雜的類型(例如,對於樹,state->state
可能是用作存儲節點的堆棧的NSMutableArray)。當第一次調用countByEnumeratingWithState:objects:count:
時,state->state
爲0;檢查這個條件來初始化state
結構。itemsPtr
:塊中的項目;指向一個C數組id
s。可可將遍歷這個數組,將每個項目依次綁定到在for-in循環中命名的變量。mutationsPtr
:用於可變集合,用於指示自上次調用countByEnumeratingWithState:objects:count:
以來集合已發生更改。通常情況下,初始化狀態時設置一次。集合增強器會增加它指向的值。可可將比較countByEnumeratingWithState:objects:count:
返回的值與前一次調用的值;如果他們不同,Cocoa會拋出異常。extra
:您可以使用它來存儲額外的數據。
您可以將state->state
和任何元素state->extra
設置爲任何您想要的;他們只是爲了您的方便而提供,並不會影響可可。 state->itemsPtr
,*state->mutationsPtr
和該方法返回的值會影響Cocoa。
至於另外兩個方法參數,stackbuf
是Cocoa提供的用於存放項目的數組。它的使用是可選的,但如果您不使用它,則必須爲state->itemPtr
分配存儲空間。如果您使用它,請在每次調用時將state->itemsPtr
設置爲stackbuf
。 len
是stackbuf
的長度,是您可以在其中存儲的項目的最大數量。
進一步閱讀:
的可能的重複將down-voter照顧解釋爲什麼引用示例代碼包含文件化的實施是否值得投票? OP從未提及閱讀樣本。示例代碼的作者將更多時間放在示例中,而不是典型的SO回答。 taaaaanks – justin 2011-02-02 10:11:20
找到一個很好的解釋後,就恢復這個線程。蘋果鏈接似乎被打破。你可以試試這裏:https://developer.apple.com/library/ios/#samplecode/FastEnumerationSample/Introduction/Intro.html
實現我找到的快速枚舉的最好的例子是:http://mikeash.com/pyblog/friday-qa-2010-04-16-implementing-fast-enumeration.html。它看起來比現在糟糕得多。
- 1. 將實現NSFastEnumeration協議的Obj-C類型綁定到MonoTouch
- 2. 有誰知道sed -i的實現?
- 3. iPhone - 如何知道協議方法是否已實現?
- 4. 如何檢測對象是否在Objective-C中實現了NSFastEnumeration協議?
- 5. 如何實現協議
- 6. ASP.net:有誰知道如何實現YouTube的搜索框效果?
- 7. 有誰知道Square是如何實現的?
- 8. 實現NSCoding協議
- 9. 有效實施現有的協議
- 10. 如何在Ruby中實現INSTREAM協議?
- 11. 如何檢查協議是否實現?
- 12. 如何在MPI協議中實現MPI_Comm?
- 13. 如何實現UIApplicationDelegate的協議方法?
- 14. 你如何實現UIAccessibility協議?
- 15. 協議在內部如何實現?
- 16. 如何使用WebRTC實現HTTP協議?
- 17. 如何實現自定義協議
- 18. NSArray如何實現NSCopying協議
- 19. 如何實現Three20框架的協議?
- 20. 如何實現應用程序協議
- 21. CLLocation如何實現Equatable協議?
- 22. 有誰知道如何在<select>
- 23. 如何知道誰擁有ReaderWriterLockSlim?
- 24. 有誰知道如何message.framework和mime.framework?
- 25. 有誰知道如何使用MPAndroidChart?
- 26. 如何知道誰是FirstResponder?
- 27. 有誰知道類似於.NET SoapFormatter的Java實現
- 28. 有誰知道黑板模式的成功實現嗎?
- 29. 有誰知道如何讓圖像出現然後消失?
- 30. 有誰知道如何爲C++項目屬性規則實現DynamicEnumProperty類型
[正確構建NSFastEnumeration類](http://stackoverflow.com/questions/3468349/proper-construction-of-nsfastenumeration-class) – outis 2012-07-20 05:35:00