Ich möchte mehrere Bilder in der Bildlaufansicht anzeigen, wenn mehr als 70 Bilder abstürzen und der empfangene Speicherfehler angezeigt wird. Ich habe die Bilder aus dem Dokumentverzeichnis
abgerufenIch habe es versucht -
%Vor%Wie kann ich mehrere Bilder in scrollview anzeigen?
Der Rat, den andere gegeben haben, um zu einem UICollectionView
zu wechseln, ist gut, hat aber den wirklichen Fehler in deinem Code verfehlt: Die Methode imageNamed:
von UIImage
hält alle 70 deiner Bilder für immer im Speicher. Pro Dokumente:
Wenn Sie eine Bilddatei haben, die nur einmal angezeigt wird und möchte Achten Sie darauf, dass es nicht zum Cache des Systems hinzugefügt wird Erstellen Sie stattdessen Ihr Bild mit imageWithContentsOfFile :. Dieser Wille halten Sie Ihr Single-Use-Image möglicherweise aus dem System-Image-Cache Verbesserung der Speicherbenutzungseigenschaften Ihrer App.
Wenn Sie zu dieser Methode wechseln, werden die Abstürze verhindert, wenn Sie nur die Bilder laden, die Sie benötigen. UICollectionView macht dies trivial, da Sie das Bild nur laden können, wenn Sie in der Sammlungsansicht aufgefordert werden, ein Zellobjekt in der Methode collectionView:cellForItemAtIndexpath:
der Datenquelle auszufüllen.
Sie ordnen und fügen die Bilder hinzu, die den Speicher zum Absturz bringen, da alle Bilder den Gerätespeicher beanspruchen. Es gibt viele Lösungen, die die Bilder zeigen. Am besten benutzt man die UICollectionView, die nur die Bilder lädt Bildschirm. Sie gehen für jede gute Anleitung, die Ihnen zeigen kann, wie es geht, hier ist die Referenz
Vielleicht kann NSCache Ihnen helfen.
1 Wenn Sie Bild bei Index 10 anzeigen. Sie können Bild 5-9 und 11-16 zu NSCache /
zwischenspeichern2 Wenn scrollView den Bildlauf startet, holen Sie sich ein Bild von NSCache, das Sie benötigen, und entfernen Sie das Objekt, das Sie nicht anzeigen müssen.
3 Ich denke, das kann effizient sein. Apple stellt eine Demo zur Verfügung, wie sie mit den riesigen Assets umgehen, die Caches und UICollectionView verwenden. Sie sehen es sich an.
Ich habe auch das gleiche Problem gesehen, das ich unter Verwendung der einfachen Linie gelöst habe.
instead of using this:
try using this:
Ich hoffe, es würde Ihr Problem lösen, indem Sie mit imageWithContentsOfFile
Speicher freigeben. Sie erhalten also nicht Memory Warning
UPDATE
Sie können auch Bilder von einer beliebigen Remote-URL und auch vom Dokumentverzeichnis Ihrer Anwendung anzeigen, indem Sie andere Methoden von UIImage Class
sag, ob es hilft
Verwenden Sie @autoreasepool. Hier sind Details zu @autoreleaspool
Die Anweisung @autoreleasepool führt die gleiche Aufgabe wie zuvor aus, statt die Klasse NSAutoreleasePool zu verwenden. Die Art und Weise, wie das NSAutoreleasePool funktionierte, war etwas komisch, da das Erstellen eines NSAutoreleasePools einen Effekt in der gesamten Anwendung verursachte; @autoreleasepool erstellt einen Bereichsbereich und macht es klarer, was sich innerhalb des Pools befindet und wann es drainiert wird (wenn es den Gültigkeitsbereich verlässt). Es ist auch effizienter nach Apple.
Das Konzept eines Autorelease-Pools ist einfach, wenn eine Objektinstanz als Autorelease markiert wird (zum Beispiel NSString * str = [[[[NSString Alloc] InitWithString: @ "Hallo"] Autorelease];), wird es behalten haben Zählung von +1 zu diesem Zeitpunkt, aber am Ende der Laufschleife wird der Pool geleert, und bei jedem Objekt, das mit Autorelease markiert ist, wird der Retain-Zähler dekrementiert. Es ist eine Möglichkeit, ein Objekt herumzuhalten, während Sie alles vorbereiten, was es für sich selbst behalten wird.
Während ARC das Autorelease-Schlüsselwort nicht vom Entwickler verwendet, fügt das zugrunde liegende System, das ARC verwaltet, das für Sie ein. (Denken Sie daran: Alle ARC-Vorgänge führen zu den entsprechenden Zeiten für Sie Retain-, Release- und Autorelease-Aufrufe ein). Aus diesem Grund muss das bestehende AutoreleasePool-Konzept beibehalten werden.
Wenn Sie den Autorelease-Pool entfernen, beginnen Ihre Objekte zu lecken Weitere Informationen finden Sie hier
Tags und Links objective-c iphone ios crash