Profilierung von Swift-Code: Engpässe in der Praxis finden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum die Profilierung von Swift-Code die Fähigkeit Nr. 1 für iOS/macOS-Entwickler ist

Moderne iOS- und macOS-Anwendungen werden immer komplexer und die Benutzer immer anspruchsvoller. Niemand wird 5 Sekunden auf das Laden eines Bildschirms warten oder ruckelige Animationen ertragen. Leistungsoptimierung ist kein Luxus, sondern eine Notwendigkeit. Aber wie erkennt man, welcher Codeabschnitt die gesamte Anwendung verlangsamt? Die Antwort ist die Profilierung von Swift-Code.

Profilierung ist der Prozess der Datenerfassung über die Programmausführung: Ausführungszeit von Funktionen, Speichernutzung, Aufrufhäufigkeit. Ohne sie wird jeder Optimierungsversuch zur Kaffeesatzleserei. In diesem Artikel werden wir praktische Werkzeuge und Techniken besprechen, die Ihnen helfen, Engpässe in Swift-Code für iOS und macOS zu finden. Sie lernen die Verwendung von Instruments, os_signpost und den integrierten Xcode-Tools und sehen reale Codebeispiele.



1. Swift-Profilierungswerkzeuge in Xcode

Xcode bietet eine leistungsstarke Reihe von Profilierungswerkzeugen, die in der Anwendung Instruments gebündelt sind. Hier sind die wichtigsten, die jedem Entwickler nützlich sein werden:

  • Time Profiler – Zeigt, wie viel Prozessorzeit für jede Funktion aufgewendet wird. Ideal zum Auffinden von „Hot Spots".
  • Allocations – Verfolgt die Speicherzuweisung und -freigabe. Hilft beim Auffinden von Lecks und übermäßigem Speicherverbrauch.
  • Leaks – Sucht automatisch nach Speicherlecks (Retain Cycles).
  • Core Animation – Analysiert die Leistung von Grafiken und Animationen.
  • os_signpost – API zum manuellen Hinzufügen von Markierungen im Code, die dann in Instruments sichtbar sind.

Das Starten der Profilierung ist einfach: Wählen Sie das Schema in Xcode, drücken Sie Cmd + I (Product → Profile) und wählen Sie die gewünschte Vorlage in Instruments.



1.1. Erster Start: Time Profiler

Angenommen, Sie haben eine Anwendung, die eine Liste von 10.000 Elementen langsam verarbeitet. Starten Sie den Time Profiler und führen Sie das Szenario aus. Nach einigen Sekunden sehen Sie einen nach Zeit sortierten Aufrufstapel. So sieht das im Code aus:

func processLargeArray() {    let data = (0..<10000).map { $0 }    let result = data.filter { $0 % 2 == 0 }.map { $0 * 2 }    print(result.count)}

Der Time Profiler zeigt, dass filter und map den größten Teil der Zeit beanspruchen. Das ist jedoch zu erwarten. Was aber, wenn das Problem woanders liegt? Zum Beispiel beim häufigen Aufruf einer teuren Funktion innerhalb einer Schleife.



2. Praxisbeispiel: Optimierung der Arbeit mit Core Data

Ein häufiges Problem bei iOS sind langsame Core Data-Abfragen. Betrachten wir ein Beispiel: Laden von 5000 Objekten mit Filterung nach Namen.

func fetchUsers(with name: String) -> [User] {    let request = User.fetchRequest()    request.predicate = NSPredicate(format: "name == %@", name)    request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]    return (try? context.fetch(request)) ?? []}

Wenn Sie den Time Profiler starten, sehen Sie möglicherweise, dass der Fetch 200 ms dauert – viel. Aber warum? Möglicherweise wurde kein Index für das Feld name erstellt. Fügen Sie in Xcode einen Index im Datenmodell hinzu:

  • Öffnen Sie die .xcdatamodeld-Datei.
  • Wählen Sie die Entität User aus.
  • Fügen Sie im Datenmodellinspektor (Data Model Inspector) name im Abschnitt Indexes hinzu.

Danach zeigt ein erneutes Profil eine Reduzierung der Zeit auf 20–30 ms. Ein Unterschied um den Faktor 10!



2.1. Verwendung von os_signpost für manuelle Markierungen

Manchmal bieten die Standardwerkzeuge nicht die gewünschte Detailtiefe. Dann hilft os_signpost weiter. Es ermöglicht Ihnen, manuell den Beginn und das Ende eines interessierenden Codeabschnitts zu markieren und diese Markierungen dann in Instruments zu sehen.

Blogs

Buchempfehlungen