Il compilatore Swift compila le funzioni inutilizzate o le ignora?Il compilatore Swift ignora le funzioni inutilizzate?
risposta
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.
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. –
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 . –
Anche interessante, ma non risponde completamente alla domanda: [Aumentare le prestazioni riducendo la spedizione dinamica] (https://developer.apple.com/swift/blog/?id=27) –