2016-06-23 16 views
0

Ich arbeite an einer Anwendung, die viele Bildschirme, benutzerdefinierte Ansichten und API-Aufrufe auf fast jedem Bildschirm hat. Manchmal, wenn der Benutzer die App für eine lange Zeit verwendet, wird es wegen Out of Memory Probleme abgestürzt. Idealerweise habe ich beim Entwickeln der App alle Richtlinien befolgt und ARC kümmert sich um die Speichernutzung. Was ist der beste Weg, um solche Speicherprobleme zu vermeiden?Was sind die besten Möglichkeiten zur Vermeidung von Arbeitsspeicherproblemen in iOS?

+1

Ich habe so viele große Apps gesehen, die sehr effizient arbeiten. Sie können ARC nicht zum Absturz Ihrer App veranlassen. Wenn Ihre App aufgrund der Speichernutzung abstürzt, liegt ein Problem mit Ihrem Code vor. Geben Sie die Details zum Absturz an und fügen Sie Code hinzu. –

+0

FYI ARC kümmert sich nicht um die Speichernutzung. –

+0

Ok gut, ich werde den Absturzbericht bekommen und bald zur Verfügung stellen. – Pushkraj

Antwort

0

-Code ein eingebauten Speicher Profiler hat, die Sie mit diesem Problem helfen kann - für eine Anleitung, wie man es zu benutzen, könnte dies http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode

Ansonsten hilfreich sein, wenn dealloc ist es könnte nicht aufgerufen wird sein ein Symptom eines Retain-Zyklus (zwei Objekte erhalten starke Referenzen zueinander, so dass sie niemals freigegeben werden).

+0

... und dies ist ein Problem, das durch den Begriff der "schwachen Referenzen" unterstützt werden könnte. Während dieses Konzept normalerweise im Zusammenhang mit dem Erstellen von selbstreferenzierenden Datenstrukturen präsentiert wird, die gelöscht werden können, ist es auch nützlich, wenn Sie Verweise auf Dinge erstellen möchten, die (wie Sie sagen ...) entsorgt werden können, wenn Speicher vorhanden ist fängt an, eng zu werden. (Wenn das fragliche Objekt geerntet wird, wird der Zeiger darauf auf "Null" gesetzt, und Sie müssen es deshalb testen. Es können sehr unvorhersehbare Rennbedingungen auftreten.) –

+0

... noch würde ich der Meinung sein, dass "Dies ist wahrscheinlich ein Design-Problem." Wenn die Anwendung "viele Bildschirme hat", kann sie sich nicht (!) Den Luxus leisten, all diese Datenstrukturen für all diese Bildschirme gleichzeitig "am Leben zu erhalten". Anstatt sich zu sehr auf das Verhalten des Speicherverwalters zu verlassen, "mit all den Race-Bedingungen und Debug-Hässlichkeiten, die dazugehören", müssen Sie sich als Design (!) - Problem selbst darum kümmern. Datenstrukturen müssen möglicherweise explizit entsorgt und dann neu erstellt werden. In der mobilen Welt musst du STINGY (!) Mit RAM sein! –