2015-07-08 2 views

risposta

8

Dal docs:

ContiguousArray:

efficienza è equivalente a quella della matrice, a meno che T è una classe o tipo di protocollo @objc, nel qual caso usando ContiguousArray potrebbe essere più efficiente. Si noti, tuttavia, che ContiguousArray non collega a Objective-C. Vedi Array, con cui ContiguousArray condivide la maggior parte delle proprietà, per maggiori dettagli.

In pratica, ogni volta che ci si memorizzare classi o @objc protocollo tipi in una matrice, si potrebbe desiderare di considerare l'utilizzo di ContiguousArray invece di un Array.

ArraySlice

ArraySlice utilizza sempre memorizzazione contiguo e non ponte per Objective-C.

Attenzione: conservazione a lungo termine di istanze ArraySlice è scoraggiato

Poiché un ArraySlice presenta una vista sulla memorizzazione di alcuni più grandi matrice anche dopo il termine di durata della matrice originale, memorizzare la fetta può prolungare la durata di elementi che non sono più accessibili, che possono manifestarsi come memoria apparente e perdita di oggetti.Per prevenire questo effetto, utilizzare ArraySlice solo per il calcolo transitorio.

ArraySlices vengono utilizzate la maggior parte delle volte in cui si desidera ottenere un sottoinsieme da un array, come:

let numbers = [1, 2, 3, 4] 
let slice = numbers[Range<Int>(start: 0, end: 2)] //[1, 2] 

tutti gli altri casi si dovrebbe usare Array.

1

Swift definisce le seguenti classi che implementano il protocollo ArrayType; Array, Array contiguo, fetta.

Array Swift è la classe principale che rappresenta array, L'array è una classe generica che richiede 1 tipo, Un array di numeri interi avrà il tipo di Array<Int>, creando un array intero:

var myArray = Array<Int>() 

fetta è un array con un'implementazione interna che rende la computazione economica degli elementi dalla cima dell'array. Di seguito si esibirà bene su un tipo di fetta:

var arr = [1,2,3,4,5] 
arr[1…4] 

Non c'è molta documentazione relativa alla ContiguousArray, ma dal suo nome si può intuire che ha a che fare con lo stoccaggio matrice interna, probabilmente gli elementi sono memorizzati in Layout di allocazione di memoria contigua.

Read more.

1

Buona fonte in una classe diversa di Swift è: http://swiftdoc.org/

Array è molto chiaro in modo consente di parlare di altri due.

ContiguousArray: http://swiftdoc.org/type/ContiguousArray/

Un veloce, matrice contiguo-memorizzati di T.

efficienza è equivalente a quella della matrice, a meno che T è una classe o tipo di protocollo @objc, nel qual caso l'utilizzo di ContiguousArray potrebbe essere più efficace . Si noti, tuttavia, che ContiguousArray non collega a Objective-C. Vedere Array, con cui ContiguousArray condivide la maggior parte delle proprietà , per ulteriori dettagli.

ArraySlice: http://swiftdoc.org/type/ArraySlice/

Il tipo Array simile che rappresenta una sotto-sequenza di qualsiasi Array, ContiguousArray, o altro ArraySlice.

ArraySlice utilizza sempre memoria contigua e non collega a Objective-C.

In breve:

ContiguousArray è maggiore efficienza quando T è un tipo di classe o protocollo @objc ArraySlice è rappresentare Array parzialmente sub.

+0

Possiamo lanciare un ArraySlice a una matrice, è quella possibile con array contiguo .. E come usare questo e quando? –

1

C'è un nuovo documento di Apple. https://git.io/vg5uw

Quindi,

ContiguousArray<Element> è il più veloce e più semplice dei tre-uso questo quando si ha bisogno "C allineamento" delle prestazioni. Gli elementi di un insieme contiguo vengono sempre memorizzati in modo contiguo nella memoria.

.

Array<Element> è come ContiguousArray<Element>, ma ottimizzato per conversioni efficienti di cacao e back-quando elemento può essere un tipo di classe , Array<Element> può essere sostenuta dal (potenzialmente non contigui) archiviazione delle NSArray arbitrario piuttosto che da un Swift ContiguousArray. Array<Element> supporta anche up e downgrade tra array di tipi di classe correlati.Quando Element è noto per essere un tipo non di classe , le prestazioni di Array<Element> sono identiche a quello di ContiguousArray<Element>.