2009-05-25 16 views
2

Ich versuche, dynamisch Subviews einen UiScorllView in Echtzeit (um Speicherplatz zu sparen).Hinzufügen Subviews UIScrollView .. glatt

Doing so bewirkt, dass die Scrollview für eine kurze Sekunde zu hängen ... was ist der Weg, um dies?

irgendwelche Hinweise geschätzt

Antwort

3

auf das Lesen nach oben, wie die UITableView dieses Problem löst. Ihre größten Performance-Treffer sind hier die Zuordnung und erste Zeichnung der Unteransicht, aber vor allem die Zuordnung. UITableView s Verwenden Sie eine Wiederverwendungs-ID und einen speicherinternen Heap, um alle Zellen während des Scrollens im Speicher zu behalten, sodass nur die bereits zugewiesenen Zellen wiederverwendet werden können, anstatt jedes Mal, wenn eine neue Zelle in den sichtbaren Bereich scrollt, neue zuzuweisen.

Vielleicht könnten Sie Ihre eigenen Subview Wiederverwendung System implementieren sich alle, dass die Zuweisung Zeit zu sparen. Lesen Sie nochmals speziell, wie die UITableView es tut und modellieren Sie davon ab. Leider gibt es wirklich keine einfachere Lösung als das, was mir einfällt.

2

Ich schlage vor, dass jede Maßnahme, die möglicherweise die Benutzeroberfläche hängen könnte, sollte in einem Thread platziert werden. Auf diese Weise wird der Vorgang zum Hinzufügen der Unteransicht im Hintergrund ausgeführt, ohne den Hauptthread zu stören.

Sie könnten dies entweder durch NSThread tun, oder Sie könnten die NSOperationQueue implementieren.

Erklärung des NSThread ist einfach;

[NSThread detachNewThreadSelector:@selector(myFunction:) toTarget:myObject withObject:argumentObject]; 

Wo myFunction 'mit dem Namen einer Funktion ersetzt werden sollte, die ‚myObject‘ mit einem Objekt (oder einfach Zustand self, wenn Sie die aktuelle Klasse wollen den Faden zu handhaben) und ‚argumentObject‘ sollte ersetzt durch irgendein Objekt, das Sie als Argument übergeben möchten; dies kann sein nil

Die Funktion selbst sollte so aussehen;

-(void)myFunction { 
    NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init]; 
    // do your thing here... 
    [pool release]; 
} 

Jeder Thread sollte einen Autorelease-Pool haben.

Ein Hinweis; Wenn Ihre Unteransicht animiert werden soll, versuchen Sie, einen UIAnimation Block

zu deklarieren
Verwandte Themen