2009-07-22 13 views
0

Ich habe eine große Liste von Ansichten in einem UIScrollView implementiert. Ich kann aufgrund der Art meiner App keine Tabellenansicht verwenden.removeFromSuperView/Speicher/dynamische Ansicht wechseln

Grundsätzlich habe ich eine Sammlung von 'Blöcken', die View-Controller selbst sind, in einem UIScrollView. Alles funktioniert, aber Speicher ist ein Problem auf sehr großen Seiten. Ich habe das dynamische Hinzufügen der Unteransichten erfolgreich implementiert (wenn sie auf dem Bildschirm erscheinen, werden sie angelegt und der Elternansicht hinzugefügt). Die Blöcke selbst werden auf einmal eingerichtet und erstellt, aber ihre tatsächlichen Ansichten, dh block.view, werden erst dann dem großen Container hinzugefügt, wenn sie auf dem Bildschirm erscheinen. Das funktioniert großartig, aber ich brauche eine Möglichkeit, die Ansichten aus dem Speicher zu entfernen, sobald sie nicht mehr auf dem Bildschirm angezeigt werden. removeFromSuperView macht sie zwar unsichtbar, reduziert aber nicht die Speichernutzung.

Wenn ich sofortFromSuperView nach AddSubview entfernen, wird der Block nicht angezeigt und der Speicher geht nicht nach oben. Wenn ich nach einem Zeichenzyklus RemoveFromSuperview lösche, geht der Speicher beim Zeichnen nach oben und geht nicht mehr nach unten, obwohl Sie die Ansicht nicht mehr sehen können. Es ist so, als würde die Ansicht zwischengespeichert, bis ich tatsächlich die gesamte Ansicht freigebe. Dies macht keinen Sinn, da es vor dem Zeichnen nicht viel Speicher verwendete, obwohl es erstellt wurde.

Ich kann die Ansicht nicht freigeben, da sie zu meinem Block (viewcontroller) gehört, der viele andere (z. B. Layout-) Informationen enthält. Ich muss nur die Erinnerung zurückbekommen. Ich weiß, dass das Speichern der Ansicht im Speicher vor einem Zeichenzyklus nicht dazu führt, dass der Speicher steigt, daher sollte ich ihn nicht loswerden müssen.

Zum Beispiel, wenn ich anstelle von addSubview beibehalten, weiß ich, dass meine Ansicht noch da ist, aber es nicht fast so viel Speicher verwendet.

Ich habe versucht, auf der vc einen Speicher aufrufen

Antwort

0

Warnung Ich glaube UIViews klug sind über nicht eigentlich eine Schicht für sich Zuweisung, bis er angezeigt wird. Aus diesem Grund steigt die Speicherbelegung erst, wenn Sie sie einer Superansicht hinzufügen.

Sie sollten die Ansicht erst erstellen, wenn sie benötigt wird, und sie dann freigeben, sobald sie aus der Bildlaufansicht entfernt wird. Auf diese Weise wird die Schicht freigegeben.

Im Grunde sollten Sie loadView implementieren, um die Ansicht zu erstellen (und neu zu erstellen), wenn auf sie über die Eigenschaft view zugegriffen wird.

Verwandte Themen