Se la pura velocità è l'unico problema (ovvero si sta creando un motore di rendering in cui conta ogni piccolo ciclo CPU), il modo più veloce per scorrere tra gli oggetti NSCollection (a partire da iOS 5.0 ~ 6.0) è vari metodi "enumerateObjectsUsingBlock". Non ho idea del perché sia così, ma l'ho provato e sembra che sia così ...
Ho scritto un piccolo test creando raccolte di centinaia di migliaia di oggetti che hanno ciascuno un metodo che riassume una semplice serie di int . Ognuna di queste raccolte è stata costretta a eseguire i vari tipi di iterazione (per ciclo, enumerazione rapida, makeObjectsPerformSelector e enumerateObjectsUsingBlock) milioni di volte, e in quasi tutti i casi i metodi "enumerateObjectsUsingBlock" hanno vinto facilmente nel corso dei test.
L'unico momento in cui questo non era vero era quando la memoria ha cominciato a riempirsi (quando ho iniziato a correre con milioni di oggetti), dopo di che ha cominciato a perdere a "makeObjectsPerformSelector".
Mi dispiace, non ho scattato un'istantanea del codice, ma è un test molto semplice da eseguire, consiglio vivamente di provarlo e vedere di persona. :)
fonte
2012-08-13 23:21:52
Grazie per il link, non conoscevo questo documento! Come dici tu, la sezione "Srotolare i loop" afferma chiaramente che gli sviluppatori di Cocoa hanno fatto ottimizzazioni interne con -makeObjectsPerformSelector: – mouviciel
My pleasure. Ci sono cose interessanti lì dentro. –