2015-02-11 11 views
20

Sto facendo qualche ricerca su Swift e le sue differenze con Objective-C. Da quello che posso raccogliere, l'attuale versione di Swift è abbastanza veloce, veloce anche in questo caso Objective-C: see here.Swift vs Objective-C: prestazioni dell'app

Tuttavia, poiché la maggior parte di questi test viene eseguita con algoritmi di ordinamento e simili, mi chiedo se Swift sarà effettivamente più veloce di Objective-C quando viene utilizzato per lo sviluppo di app iOS. Qualcuno può illuminarmi su questo, preferibilmente dalla propria esperienza.

risposta

22

There is a great blog-post sul miglioramento delle prestazioni di Swift in particolare dopo versione di Swift 1.2.

L'autore ha eseguito diversi test con diversi tipi di codice come codice Swift di tipo Objc, solo codice Swift e solo codice Objective-c. E il risultato è stato che Swift 1.2 è molto più veloce di prima. Ha eseguito test con JSON, quindi è un po 'più pratico dei semplici algoritmi.

Oltre alla "vera" prestazione, la mia esperienza personale è che mi sto sviluppando molto più facilmente in Swift. Non mi sono mai piaciuti i file .h e .m da Objective-C perché ha interrotto il "flusso di programmazione". Inoltre penso che la stessa sintassi sia molto più semplice rispetto all'obiettivo-c [con queste parentesi].

Quindi penso che, se si scrive un nuovo progetto da Scratch, Swift è molto più semplice, veloce ed elegante. (La mia opinione)

34

Swift è richiesto da Apple per essere più veloce di Objective-C e, come hai detto, è più veloce in tali algoritmi di ordinamento, ma per l'utilizzo di iOS non è possibile riconoscere la differenza tra un'app sviluppata in Swift o Objective-C. Ho sviluppato molte app in Objective-C che si trovano in Apple Store, e ora diverse in Swift e fino ad ora gli utenti non possono dire la differenza se una è molto più veloce dell'altra.

È improbabile che Swift causi applicazioni che funzionano molto più velocemente delle applicazioni sviluppate in Objective-C. Anche se i due linguaggi si chiudono, entrambi hanno come target le stesse API Cocoa e Cocoa Touch, iOS e OS X a, entrambi sono linguaggi tipizzati staticamente e utilizzano entrambi lo stesso compilatore LLVM, quindi non sono poi così diversi. Ci saranno differenze di prestazioni, in quanto le due lingue non sono identiche, dopotutto, ma non si aspettano differenze significative.

Swift è stato sviluppato da Apple per fare appello ai nuovi programmatori perché è simile a linguaggi come Ruby e Python di quanto lo sia Objective-C.

1

Il confronto rapido con Objective-C ha i suoi vantaggi come: Swift gestisce le stringhe più facilmente, le tuple veloci offrono variabili composte e inoltre i codificatori non hanno bisogno di dedicare tempo ad annotare variabili con informazioni sul tipo e a commettere errori; nella maggior parte dei casi, il compilatore può inferire il tipo dal valore con cui viene impostata una variabile.

+2

Questa risposta fa non affrontare le prestazioni, che è la domanda qui .. È una domanda importante. Queste caratteristiche linguistiche e la magia del compilatore valgono ogni tipo di danno per le prestazioni di una soluzione esistente e probabilmente ugualmente valida? Mi piacciono anche quelle funzioni, ma non valgono nemmeno un lieve costo di prestazioni. – Morkrom

+0

non costruttivo. OP non ha chiesto informazioni sulle strutture linguistiche. Inoltre, come detto, non ha affrontato le prestazioni. –

0

È possibile scrivere codice lento in qualsiasi lingua e Swift non fa eccezione. Non ho avuto il tempo di valutare completamente la versione beta di Swift 1.2, ma anche prima che la maggior parte del codice potesse essere resa abbastanza veloce, ma era anche molto facile renderla molto lenta. L'accesso ai metodi di istanza non finalizzati in particolare era molto lento e le build di Debug erano orribilmente lente (ho diversi casi di 100x più lenti delle versioni di rilascio). Un po 'di lavoro per ottimizzare i loop più profondamente annidati era solitamente sufficiente per arrivare rapidamente da qualche parte vicino alle prestazioni C.

La maggior parte del codice che scrivi non è così critico dal punto di vista delle prestazioni se è possibile spostare le operazioni lente dalla coda UI principale. Trascorreranno più tempo nelle chiamate API e quelli non saranno interessati dalla lingua utilizzata per chiamarli.Anche laddove le prestazioni sono critiche, la quantità di codice che deve essere fortemente ottimizzata tende ad essere piccola e si può passare a un linguaggio più veloce (ad es. C) solo per quelle parti.

Quando si confronta l'Obiettivo-C vale anche la pena considerare cosa intendiamo per Obiettivo-C. Puoi scrivere le funzioni C nel codice Objective-C e daranno un codice veloce come C. Direi che erano C e che per parlare in modo significativo delle prestazioni di Objective-C dovrebbe essere un codice basato sull'invio di messaggi Objective-C e probabilmente NSArrays piuttosto che array C grezzi. Se questa è la base, Swift (quando ottimizzato e usando le strutture e le classi finali) uscirà piuttosto bene. Tuttavia, se si sta confrontando con il codice C, di solito sarà il caso che Swift sarà più lento al momento.

Ho alcuni post sul blog sull'ottimizzazione di Swift sul mio blog e ho dato un short talk a ottobre.

0

Swift è più veloce rispetto a Objective-C; questo è quello che sostiene il team di Apple Swift, ed è certamente vero. Tuttavia, il fatto è che devi pianificare molte cose per scrivere le app reattive. Qui ci sono alcuni indicatori:

  1. Rimuovere risorse inutilizzate
  2. risorse ottimizzare per ex immagini
  3. Caching
  4. compressione
  5. codice riutilizzabile
  6. oggetto la gestione della vita