2013-04-10 9 views

risposta

20

CCArray emula NSMutableArray. È un wrapper attorno a un array C (buffer di memoria). È stato sviluppato ed è utilizzato internamente da cocos2d perché NSMutableArray è stato ritenuto troppo lento. Tuttavia il miglioramento delle prestazioni è minimo. Qualsiasi caso d'uso (caratteristiche) di CCArray che cocos2d non utilizza rimane una potenziale fonte di problemi, inclusi problemi strani e difficili da debug o caratteristiche di prestazioni terribili.

Il più importante aspetto delle prestazioni è la lettura sequenziale dell'array. In my latest tests questa è un'area in cui CCArray (non più?) Eccelle. Enumerazione specificamente veloce: NSMutableArray è circa 33 volte più veloce!

CCArray è un perfetto esempio del perché non si dovrebbe reinventare la ruota, in particolare quando si tratta di classi di storage quando è già disponibile una soluzione stabile, comprovata e veloce (NSMutableArray). L'eventuale vantaggio di velocità che può avere una volta è scomparso da tempo. Ciò che rimane è un comportamento di runtime che non vorrete affrontare, incluse alcune caratteristiche di performance estremamente negative (inserimento, enumerazione rapida).

Per farla breve: non utilizzare CCArray nel proprio codice! Considera CCArray come una classe privata interna che non deve essere utilizzata nel codice utente (eccetto laddove inevitabile, cioè array di bambini).

NSMutableArray è l'implementazione di riferimento dell'array che tutti dovrebbero utilizzare poiché è estremamente ben testata, documentata e stabile (sia in termini di comportamento e velocità di runtime).

1

CCArray http://www.cocos2d-x.org/embedded/cocos2d-x/d9/d2e/classcocos2d_1_1_c_c_array.html

In cocos2d-x CCArray è mutevole, cioè è possibile aggiungere elementi ad esso. Per creare un'istanza di CCArray senza capacità, è possibile utilizzare il costruttore CCArray :: array(). CCMutableArray è un contenitore basato su modelli che può memorizzare oggetti dello stesso tipo. CCArray memorizza gli oggetti come istanze CCObject, quindi li devi castare dopo averli prelevati dall'istanza CCArray

La classe NSArray contiene un numero di metodi specificamente progettati per facilitare la creazione e la manipolazione di array all'interno dei programmi Objective-C.