Ho una classe e voglio che la mia classe confermi il protocollo NSFastEnumeration. Ho letto la documentazione ma non è chiaro. Qualcuno può dirmi cosa deve restituire il metodo del protocollo e come funziona? Grazie in anticipo.Qualcuno sa come implementare il protocollo NSFastEnumeration?
risposta
Apple FastEnumerationSample mostra cosa fare, ma ecco un guasto.
L'unico metodo NSFastEnumeration
, countByEnumeratingWithState:objects:count:
, restituisce blocchi della raccolta. Viene eseguito ogni volta che sono necessari più elementi, finché non indica che non ci sono più elementi restituendo 0. Un blocco viene passato come un array C di id
s.
All'interno del metodo, il parametro state
contiene la maggior parte (se non tutti) dei dati che verranno utilizzati. È necessario impostare state->itemsPtr
e aggiornare state->state
con ciascuna chiamata separata di countByEnumeratingWithState:objects:count:
. Ecco una breve descrizione di ciascun campo di NSFastEnumerationState
:
state
: rappresenta la posizione nella sequenza essendo iterata. Per le collezioni indicizzate, questo sarebbe l'indice. Per gli elenchi collegati, questo potrebbe essere un puntatore del nodo. Per altri tipi, questo potrebbe essere un tipo più complesso (ad esempio per un albero,state->state
potrebbe essere un NSMutableArray utilizzato come stack per memorizzare i nodi). Quando viene chiamato per la prima voltacountByEnumeratingWithState:objects:count:
,state->state
è 0; controllare questa condizione per inizializzare la strutturastate
.itemsPtr
: gli articoli nel blocco; punta a un array C diid
s. Cocoa eseguirà il loop su questa matrice, vincolando a turno ciascuna voce alla variabile denominata nel ciclo for-in.mutationsPtr
: per raccolte mutabili, utilizzato per indicare che la raccolta è stata modificata dall'ultima chiamata acountByEnumeratingWithState:objects:count:
. In genere, l'avresti impostato una volta durante l'inizializzazione dello stato. I mutatori di raccolta incrementano il valore a cui questo punta. Cocoa confronterà il valore restituito dacountByEnumeratingWithState:objects:count:
al valore della precedente chiamata; se sono diversi, Cocoa farà un'eccezione.extra
: è possibile utilizzare questo per memorizzare dati aggiuntivi.
È possibile impostare state->state
e qualsiasi elemento di state->extra
in base alle proprie esigenze; sono forniti esclusivamente per la vostra comodità e non influenzano il cacao. state->itemsPtr
, *state->mutationsPtr
e il valore restituito dal metodo, tuttavia, influisce sul cacao.
Come per gli altri due parametri del metodo, stackbuf
è una matrice che Cocoa fornisce per contenere gli elementi. Il suo utilizzo è facoltativo, ma se non lo utilizzi, dovrai allocare spazio di archiviazione per state->itemPtr
. Se lo usi, imposta state->itemsPtr
su stackbuf
ad ogni chiamata. len
è la lunghezza di stackbuf
, il numero massimo di elementi che sarà possibile memorizzare al suo interno.
Ulteriori approfondimenti:
il down-elettore si preoccuperà di spiegare perché fare riferimento al codice di esempio che contiene un'implementazione documentata degna di un down-vote? l'OP non ha mai menzionato la lettura del campione. l'autore del codice di esempio inserisce più tempo nell'esempio della tipica risposta SO. taaaaanks – justin
due torti non fanno bene ... (cioè una brutta risposta ... per una brutta domanda). non sto votando su o giù, dato che questo tipo di risposta è fastidiosamente pervasivo .. IMO, si dovrebbe presumere che gli OP hanno letto la documentazione ufficiale, sempre, e o c'è qualcosa "oltre" ciò che è affermato nella " documenti ufficiali "- che possono essere elaborati, qui ... o la domanda dovrebbe essere votata. solo il mio $ .02. –
@alex non è necessario presumere che l'OP abbia letto i documenti, come indicato nell'OP. l'OP non ha menzionato il fatto di aver visto il codice di esempio che spiega e dettaglia questo argomento abbastanza bene. la chiarezza nella mia risposta mi sembrava appropriata perché avrei dovuto distillare e ripetere ciò che il campione già spiega. naturalmente, questi campi di commento e nuove domande possono essere chiesti se sono necessari ulteriori chiarimenti. considerando che la risposta è stata contrassegnata come risolta e il numero di voti positivi, potresti considerare la risposta una spinta abbastanza buona nella direzione giusta per il caso generale. (segue) – justin
Basta far rivivere questa discussione dopo aver trovato un ottimo spiegazione. Il collegamento Apple sembra essere rotto. Puoi provare qui: https://developer.apple.com/library/ios/#samplecode/FastEnumerationSample/Introduction/Intro.html
Il miglior esempio per implementare l'enumerazione veloce che ho trovato è il seguente: http://mikeash.com/pyblog/friday-qa-2010-04-16-implementing-fast-enumeration.html. Sembra molto peggio di quello che è.
- 1. Qualcuno sa cos'è gvfsd-http?
- 2. Assemblaggio fsi.exe: qualcuno sa come inserirlo?
- 3. Android: qualcuno sa come acquisire video?
- 4. virtualenv, mysql-python, pip: qualcuno sa come?
- 5. Qualcuno sa come utilizzare PagerTitleStrip in Android
- 6. Qualcuno sa cosa significa advapi?
- 7. Qualcuno sa come abilitare ARM FIQ?
- 8. Qualcuno sa come usare onActivityReenter correttamente?
- 9. Qualcuno sa come B-Tree ha preso il suo nome?
- 10. implementare il protocollo con diverso tipo associato
- 11. Implementare privatamente un protocollo?
- 12. Qualcuno sa cosa significa l'output di getevent?
- 13. Qualcuno sa di un fork di iText?
- 14. Qualcuno sa di un buon esploratore OData?
- 15. Qualcuno sa cosa significa messaggio ShellHook HSHELL_RUDEAPPACTIVATED?
- 16. Qualcuno sa cosa fa "mov edi, edi"?
- 17. Qualcuno sa perché sto ricevendo questo IllegalMonitorStateException?
- 18. Qualcuno sa di un buon riferimento per il design DSL?
- 19. Qualcuno sa dove ottenere il codice PVP Cray attuale?
- 20. Qualcuno sa come google analytics elabora i dati?
- 21. qualcuno sa come ottenere getWindow() in servizio su Android?
- 22. NSFastEnumeration in Swift
- 23. Implementare protocollo ObjectiveC in rapida
- 24. Swift, come implementare il protocollo hastable basato sul riferimento dell'oggetto?
- 25. Qualcuno sa come scrivere un Apple Push Notification Provider in C#?
- 26. Qualcuno sa di un'applicazione di traduzione collaborativa OpenSource?
- 27. Qualcuno sa di una libreria di testi java2d?
- 28. Blocco OSX JNLP Avvia Java1.8U40 - Qualcuno sa perché?
- 29. Implementazione di NSFastEnumeration sulla classe personalizzata
- 30. Qualcuno sa di una generica mappa transazionale | Imposta | Lista
possibile duplicato di [Costruzione corretta della classe NSFastEnumeration] (http://stackoverflow.com/questions/3468349/proper-construction-of-nsfastenumeration-class) – outis