2009-05-09 5 views
1

Ich werde einige raffinierte Dinge in den Delegaten Methoden beim Scrollen machen. Ich werde auch das dynamische Vorladen von Inhalten implementieren, so dass es theoretisch möglich ist, durch ein paar Hunderttausend Bilder zu blättern. Aber ich fürchte, jedes Mal, wenn ich die Vorladeaktion für den nächsten großen Block in Scrollrichtung durchführe, wartet der Delegierte darauf, dass die Datenquelle die Daten liefert, und die gesamte Bildlaufansicht wird für diesen Moment eingefroren.Muss ich den Delegaten eines UIScrollView in einem anderen Thread ausführen, um Leistungsprobleme beim Scrollen zu vermeiden?

Das Problem ist, dass ich immer auf die Unteransichten der Bildlaufansicht zugreifen muss. Ich bin neu auf der Plattform und ich weiß nicht, ob ich immer noch Zugriff hätte, wenn ich einen weiteren Thread für diese Vorladeaktionen öffne. Oder würde der Scrollview nicht darauf warten, dass der Delegierte etwas erledigt?

Ich bin in der Planungsphase, also habe nicht viel Jet implementiert.

Antwort

3

Sie können nur UI-Klassen aus dem Hauptthread verwenden. Sie sollten also so viel wie möglich in einem Hintergrundthread berechnen (ich glaube, Sie können Ihre Bilder auch in einen Hintergrundthread laden) und dann performSelectorOnMainThread:withObject:waitUntilDone: verwenden, um UI-Klassen im Hauptthread zu bearbeiten.

Siehe How do I update the UI in the middle of this thread? für die andere Instanz Ihrer Frage

1

Ich habe keine spezifische Antwort auf Ihre spezifische Frage. Ich möchte nur darauf achten, dass Ihnen die RAM-Grenze von ~ 25 MB für Ihre App bekannt ist. Ich kann keine Links dazu geben, denn obwohl Apple das Limit kennt, sagen sie es nicht.

+0

ich über diese Speichergrenze kennen. Deshalb lade ich während des Scrollens nur den sichtbaren Teil und etwas Pufferteil. Während der Benutzer nach unten scrollt, lasse ich Objekte von oben los, aber die Ansichten werden wiederverwendet. Analog dazu zum Hochscrollen. – Thanks

+0

Apple kennt das Limit nicht. Das hängt davon ab, welche anderen Apps ausgeführt werden (z. B. iPod) und wie fragmentiert das System-RAM ist. Es gibt keine "harte" Obergrenze; Wenn es da wäre, würden wir einfach experimentieren und es herausfinden. –