Häufige Multithreading-Fehler, die Anfänger auf dem iPhone machen

8

Ich habe gerade Multithreading in meine App eingeführt, nur um eine dumme UIActivityIndicatorView zum Laufen zu bringen. Nun, der Aktivitätsindikator funktioniert, in Ordnung - aber jetzt stürzt meine App manchmal ab und manchmal auch nicht - unter ansonsten kontrollierten Bedingungen ... Ich muss das herausfinden, aber ich weiß nicht, wo ich anfangen soll ...

Also, was sind einige häufige Fehler, die Anfänger oft mit Multithreading auf dem iPhone machen? Bitte seien Sie spezifisch in Ihren Antworten. Vielen Dank für Ihre Zeit.

UPDATE : Ich habe meine problematische Quelle als Referenz hinzugefügt.

%Vor%     
RexOnRoids 31.08.2009, 11:56
quelle

2 Antworten

15

Diese Frage hat einige gute Ressourcen für Cocoa Multithreading: " Wo finde ich ein gutes Tutorial zum Thema iPhone / Objective Multithreading? "

Ich empfehle auch sehr, den neuen Concurrency Programming Guide ( Ignoriere jedoch die Blöcke und die Versandwarteschlangen, da Grand Central Dispatch noch nicht auf iPhone OS verfügbar ist iOS 4.0 hat nur Blöcke und GCD hinzugefügt), weil es stark für Strukturen wie% co_de ist % und NSOperation als Alternative zu manuell erstellten Threads. Informationen zu manuell erstellten Threads finden Sie im Threading-Programmierhandbuch .

Wie RC erwähnt, ist die einzige Ursache für Abstürze bei Multithread-Cocoa-Anwendungen der gleichzeitige Zugriff auf eine freigegebene Ressource. Die NSOperationQueue -Richtlinie ist nicht die schnellste, wie von Colin Wheeler hervorgehoben wurde , also sollten Sie @synchronized verwenden, um den Zugriff auf Ihre freigegebenen Ressourcen zu schützen. Sperren jeglicher Art können jedoch teuer sein. Aus diesem Grund habe ich meine Anwendungen auf die Verwendung von Single-Wide NSLock für den Zugriff auf diese Ressourcen umgestellt. Die Leistungsverbesserungen waren signifikant.

Ein weiterer Problembereich mit Cocoa und Multithreading kommt von Aktualisierungen der Benutzeroberfläche. Alle UI-Aktualisierungen in Cocoa müssen im Hauptthread ausgeführt werden, andernfalls kann es zu einer Instabilität kommen. Wenn ein Hintergrundthread eine Berechnung ausführt, müssen Sie sicherstellen, dass die Methode, die die Methode aktualisiert, in einen NSOperationQueues -Methodenaufruf eingebunden wird.

    
Brad Larson 31.08.2009, 16:30
quelle
5

Der wahrscheinlich häufigste Fehler, den Anfänger (in jeder Sprache) machen, wenn sie mit Threads arbeiten, ist der Zugriff auf veränderliche gemeinsame Ressourcen ohne Wachen / Mutexe. Sie schützen Ressourcen wie:

%Vor%

Sie sollten die Menge der Daten begrenzen, die zwischen Threads geteilt werden, und wenn sie gemeinsam genutzt werden müssen, bevorzugen Sie unveränderliche Objekte, um Konflikte zu reduzieren, die durch die Synchronisation verursacht werden.

Das Verwalten von Threads ist ein weiterer Ort, an dem Probleme auftreten können. Hier finden Sie eine Referenz für die Verwendung von Threads im iPhone.

Ссылка .

Wenn Sie keinen Code bereitstellen, können Sie nicht abschätzen, was mit Ihrer App los ist, aber ich würde zunächst sicherstellen, dass Sie die Erstellung und Beendigung des Threads korrekt verwalten und dabei besonders auf freigegebene Ressourcen achten, die Threads versuchen um darauf zuzugreifen.

    
RC. 31.08.2009 12:21
quelle