XXX verlangsamt dein iPhone möglicherweise

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XXX verlangsamt dein iPhone möglicherweise

    Hi,

    oben genannte Meldung erscheint wenn ich eine sehr alte App von mir starte. Da ich im Moment so gut wie überhaupt keine Zeit habe wäre es super, wenn Ihr mir sagt, was diese Meldung auslöst und wie ich sie am schnellsten weg bekommen.

    Die App macht überhaupt nichts besonderes. Sie holt sich eigentlich nur ein paar JSON's via HTTP und zeigt sie dann in Table- und Detailview an.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • macmoonshine schrieb:

    Verwendest du synchrone Anfragen (z. B. dataWithContentsOfURL:)? Die wären mein heißester Kandidat für so eine Meldung.

    Hm ja das ist es. Das bedeutet einen riesen Aufwand das rauszumachen. Ich habe halt eine Operation-Queue die die Daten holt. Hier ist der synchrone Aufruf eigentlich die beste Lösung. Sonst habe ich ja asynchron in asynchron. Total sinnfrei.

    Naja muss ich mir was überlegen....
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Wenn du asynchrone Aufrufe über NSURLSession verwendest, kannst du ja die Queue weiterverwenden. Lediglich der Start der Anfragen erfolgt nicht mehr über die Queue sondern direkt aus dem Main-Thread. Die Blöcke für die Ergebnisverarbeitung bekommen die Daten dann halt als Parameter. ;)

    BTW: Auch wenn es nervt: Synchrone Anfragen in einer Background-Queue sind etwas vollkommen anderes und wesentlich unperformanter als asynchrone Anfragen. Wenn du einen Hintergrund-Thread blockst, ist das immer noch mindestens halb so schlimm, als wenn du den Main-Thread blockst; und das ist ja bekanntlich unendlich schlimm. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Toll erst brauche ich 1 Stunde um es wieder compiliert zu bekommen und jetzt stürzt es beim Start ab mit

    'Application windows are expected to have a root view controller at the end of application launch'

    Ich habe da echt kein Nerv drauf.

    Gibt es hier jemanden der sich das Ansehen und mir einen KVA machen möchte was es kosten würde das dingen wieder kompatibel für die aktuellen iOS Versionen zu machen?

    Er müßte nur in der Lage sein mir eine Rechnung zu stellen. Anfragen am besten per PM.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • little_pixel schrieb:

    Klar, für neue Projekte natürlich nicht…

    Aber für altes Zeugs die in z.B. einer NSOperationQueue laufen ist das "egal".
    Wenn man keine Zeit/Geld für die Pflege hat, dann ist das für mich immer noch ein legitimer Kompromiss.
    Synchrone Anfragen blockieren auch Hintergrund-Threads. Wenn man das Ganze sowieso schon nebenläufig hat, kann man es auch direkt vernünftig machen. Geschätzter Mehraufwand ca. 0,0 Stunden.

    Übrigens hat Thallius schon genau die von dir vorgeschlagene Lösung (Background-Queue + synchrone Threads).
    „Meine Komplikation hatte eine Komplikation.“
  • Thallius schrieb:

    'Application windows are expected to have a root view controller at the end of application launch'
    Das ist eigentlich relativ einfach zu beheben, wenn du Viewcontroller verwendest. Dann brauchst du applicationDidFinishLaunching:withOptions: nur der Property rootViewController von deinem Fenster den entsprechenden Controller zuzuweisen.

    Wie und wo legst du das Fenster und den Rootviewcontroller an?
    „Meine Komplikation hatte eine Komplikation.“
  • little_pixel schrieb:



    Glaube ich Dir nicht… :-p
    Alter Code:

    Quellcode

    1. dispatch_async(..., ^{
    2. NSData *theData = [NSData dataWithContentsOfURL:...];
    3. ...
    4. }

    Neuer Code:


    Quellcode

    1. NSURLSessionTask *theTask = [theSession dataTaskWithURL:... completionHandler:^(NSData *inData, NSURLResponse *inResponse, NSError *inError) {
    2. NSData *theData = inData;
    3. // Optionale Fehlerbehandlung ansonsten weiter wie oben.
    4. }]
    5. [theTask resume];

    Was für ein Aufwand. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Was nach wie vor "das Problem" nicht löst…

    Aber jetzt erinnere ich mich an das Thema:

    Bei mir war "das Problem", dass 20 Anfragen hintereinander ausgeführt werden müssen und die Folgeanfrage basiert immer auf den vorherigen Rückgabewert.

    Deshalb habe ich das damals inr eine Schleife abnudeln lassen und das in einer NSOperation geworfen.
    Es mußten natürlich viele Einträge diese Prozedur durchlaufen.

    Das asynchron umzubauen ist der mega Aufwand.
    Wenn nein, dann sende ich Dir mein Mitelalterproejkt und gebe Dir einen 100er fürs Umbauen.
    Da würde ich mich freuen, wenn das richtig gebaut ist.

    Viele Grüße
  • little_pixel schrieb:

    Was nach wie vor "das Problem" nicht löst…
    Warum nicht? Der zweite Code-Snippet oben verwendet asynchrone Anfragen. Was willst du noch mehr?

    little_pixel schrieb:

    Bei mir war "das Problem", dass 20 Anfragen hintereinander ausgeführt werden müssen und die Folgeanfrage basiert immer auf den vorherigen Rückgabewert.
    Mach 'ne Schleife drum, und schon klappt's auch für 20 Anfragen.

    little_pixel schrieb:

    Das asynchron umzubauen ist der mega Aufwand.
    Wenn du sowieso schon Nebenläufigkeit verwendest, dann nicht. Abgesehen davon, dass die App nach dem Umbau weniger ruckelt, dürften übrigens die Downloads insgesamt auch etwas schneller laufen.

    little_pixel schrieb:

    Wenn nein, dann sende ich Dir mein Mitelalterproejkt und gebe Dir einen 100er fürs Umbauen.
    Nö, erstens interessiere ich mich nur für neuere Geschichte, zweitens habe ich null Bock mehr auf diesen ganzen Steuerscheiß, und drittens brauche ich wahrscheinlich wesentlich länger als du, weil ich mich in deinen Code einarbeiten müsste. Da fahre ich lieber in Urlaub. :D

    little_pixel schrieb:

    Da würde ich mich freuen, wenn das richtig gebaut ist.
    Das könnte dir so passen. ;) :D +scnr+

    Wenn du willst kannst du ja mal die Code-Teile hier posten, vielleicht habe ich ja Lust für ein paar Hinweise. ;)
    „Meine Komplikation hatte eine Komplikation.“

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von macmoonshine ()

  • Immerhin bekomme ich es jetzt wieder kompiliert und installiert. Danke an Tibor.

    Wenn ich nun die App das erste mal auf einem Simulator installiere und starte bekomme ich den Warnhinweis mit dem "verlangsamt ....". Bei allen weiteren malen natürlich nicht mehr. Auch ein "Reset contents und settings" des Simulators ändert daran nichts. Wie kann ich es hinbekommen, dass der hinweis wieder erscheint. Ich kann ja schließlich nicht bei jedem Versuch einen anderen Simulator nehmen und hoffen das ich es gefixt habe bevor mir die verschiedenen Typen ausgehen....

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)