Benutzerdefiniertes KeyBoard wird aufgrund des Speicherdrucks in iOS 8 beendet

8

Custom KeyBoard wird aufgrund des Speicherdrucks in iOS 8 beendet

Zunächst nimmt meine benutzerdefinierte Tastatur ungefähr 25 MB Speicher in Anspruch, aber dieser Speicher wird nicht freigegeben, und ich dissmisse die Tastatur. Der Speicher steigt weiter an, wenn wir die benutzerdefinierte Tastatur immer wieder öffnen und schließlich aufgrund des Speicherdrucks beenden.

Hilf mir mit diesem Problem?

    
Rachit 10.10.2014, 06:25
quelle

3 Antworten

1

Sie können einige Dinge in der Funktion ViewWillDisappear von KeyboardViewController

aufheben     
Tatiana 27.10.2014 14:44
quelle
1

Die Tastaturerweiterung wird in einem Prozess ausgeführt, der nach dem Verschwinden der Tastatur fortbesteht. Ihr Tastatur-View-Controller wird jedes Mal neu erstellt, wenn Ihre Tastatur erstellt wird, aber der Prozess, in dem sich der View-Controller befindet, bleibt bestehen. Also freien Speicher, wenn der View-Controller geschlossen ist. Wenn Sie Bilder verwenden, die Sie nicht mit imageNamed verwenden möchten, sollten Sie imageWithContentsOfFile: verwenden. Weil UIImage einen Cache für imageNamed verwendet, der persistent bleibt.

    
Mark Johnson 19.03.2015 00:53
quelle
1

Ich habe jede Menge Möglichkeiten ausprobiert, um dieses berühmte Gedächtnisproblem zu vermeiden, aber nach meiner langen langen Probezeit habe ich versucht, das Problem zu lösen. Fehler, der beste und einfachste Weg, um alle Speicher zu befreien, bevor eine Tastatur verschwindet, ist exit(0) in viewWillDisappear von KeyboardViewController .

aufzurufen %Vor%

[Update] exit(0) war perfekt, um den gesamten Speicher freizugeben, da der Tastaturerweiterungsprozess dadurch beendet wird. Leider scheint es so, als würde das Ausschalten des Prozesses iOS instabil machen.
Folglich ist der stabilste Weg, alle zugewiesenen Objekte so weit wie möglich in viewWillDisappear freizugeben. Zum Beispiel

Für alle benutzerdefinierten Ansichten und alle benutzerdefinierten Ansichtscontroller

  • Entfernen Sie alle starken Referenzen der Ansichten und der View-Controller, z. B. Subviews, Constraints, Gesten, starke Delegate und so weiter.

    %Vor%
  • Setzen Sie nil auf alle Objekteigenschaften der View-Controller.

    %Vor%

Für andere große benutzerdefinierte Objekte

  • Entfernen Sie alle hinzugefügten Objekte aus allen Arrays, Wörterbüchern usw.

    %Vor%
  • Zwischenspeichern von Bildern mit imageNamed: nicht.

Bei guter Freigabe wird die Speicherbelegung während des Debuggens nicht erhöht oder nur geringfügig erhöht (& lt; 0,1 MB pro Entlassung). Wenn die Speicherbelegung nach vielen Verwerfungen erhöht wird, obwohl benutzerdefinierte Objekte so oft wie möglich freigegeben werden, kann exit (0) in regelmäßigen Abständen mit dem Risiko eines Entladens aufgerufen werden.

    
NeonBerry 25.09.2015 15:39
quelle