2015-04-27 6 views
7

Il compilatore Swift compila le funzioni inutilizzate o le ignora?Il compilatore Swift ignora le funzioni inutilizzate?

+0

Questa sarebbe una domanda del linker, non del compilatore. Il compilatore non può sapere se una funzione viene utilizzata fino a quando l'intero programma non è collegato. –

+0

Penso che debbano essere inclusi, perché il linker non saprà se potrebbero essere chiamati dinamicamente attraverso Objective-C con 'performSelector:', 'NSInvocation', ecc. Solo speculazioni, però, non ho documenti per sostenere con . –

+2

Anche interessante, ma non risponde completamente alla domanda: [Aumentare le prestazioni riducendo la spedizione dinamica] (https://developer.apple.com/swift/blog/?id=27) –

risposta

3

Le funzioni inutilizzate rendono più ampio il programma.

Questo è abbastanza facile da testare. Creata una nuova applicazione Swift come applicazione Single View (iOS). Nel ViewController.swift generato, aggiungi una funzione. Fai una compilazione (Comando-B) e controlla la cartella di creazione del prodotto. Questo è di solito:

~/Library/Developer/Xcode/DerivedData/ 
    <AppName>-<IDString>/Build/Products/Debug-iphoneos/ 
    <AppName>.app/ 

Verificare la dimensione del file di <NomeApp>.

Commentare la funzione e ripetere la costruzione. La dimensione del file sarà più piccola.

ho creato un app chiamato SwiftSandbox e ha aggiunto questo:

func doSomething() -> NSString { 
    var v: NSMutableString = NSMutableString(string: "MyString is Funny") 
    v.replaceCharactersInRange(NSMakeRange(3, 3), withString: "World") 
    return v 
} 

Quando si costruisce con questa funzione, ho visto questo in bash:

-rwxr-xr-x 1 test staff 213648 Apr 27 11:33 SwiftSandbox* 

Con la funzione commentata:

-rwxr-xr-x 1 test staff 142992 Apr 27 11:33 SwiftSandbox* 

Nota che non ho modificato nessuna impostazione di ottimizzazione in Xcode, quindi non posso essere sicuro di quale effetto quello avrebbe.