Ich sehe einen Speicherverlust in iOS 8 im Simulator, wenn ich Folgendes mit UIActionSheet oder UIAlertController mache. UIActionSheet verwendet UIAlertController in IOS 8, damit die Probleme zusammenhängen.
showCameraAction wird aufgerufen, wenn eine Schaltfläche gedrückt wird. Ich habe den gesamten Inhalt von der Delegate-Methode entfernt und erhalte immer noch das Leck in dem unten gezeigten Fall. Verwende ich UIActionSheet in irgendeiner Weise, die ich nicht sollte? Ich würde mich über jede Hilfe bei der Lösung dieses Problems freuen. Derselbe Code hat keine Lecks mit IOS 7 (im Simulator).
%Vor%// leer
%Vor%Auch versucht mit UIAlertController, mit dem gleichen Ergebnis:
%Vor%
Screenshot mit Ablaufverfolgung: Ссылка
Ich würde vorschlagen, "UIAlertController" in iOS8 zu verwenden. Und verwerfen Sie das alertController-Objekt vom angezeigten Controller. während jedes Ereignis durch den "UIAlertAction" -Block ausgelöst wird.
%Vor%Dies ist ein iOS Bug.
Siehe Apple Bug Reporter Problem 21005708 , Speicherleck in UIAlertController unter ARC.
Dies ist keine Antwort, aber mehr Beweise für das Leck, das einen Kommentar übersteigt. Möge es helfen, eine Lösung oder einen Workaround zu finden. Das Leck scheint gerätespezifisch auf iPad 3 / Retina zu sein!
Ich habe selbst einige Tests durchgeführt, indem ich den View-Controller zurückhalte und loslasse, um das Leck in iOS 8.x anzuzeigen.
Siehe auch: Ссылка
AGC ist der View-Controller. Die korrekte Retain-Anzahl sollte 2 sein.
iPad Retina Simulator iOS 8.1 UND echtes iPad LEAK
// second run ... this time with LEAK by selecting an option
12:56:50.929 SimplySolitaire[27643:473670] >>> WILL actionSheet showInView: retain = 2
12:56:50.930 SimplySolitaire[27643:473670] AGC retain == 3
12:56:50.950 SimplySolitaire[27643:473670] AGC retain == 4
12:56:50.951 SimplySolitaire[27643:473670] AGC retain == 5
12:56:50.951 SimplySolitaire[27643:473670] AGC retain == 6
12:56:50.951 SimplySolitaire[27643:473670] <<< DID actionSheet showInView: retain = 6
12:56:50.998 SimplySolitaire[27643:473670] AGC release = 5
12:56:51.042 SimplySolitaire[27643:473670] AGC release = 4
12:56:51.042 SimplySolitaire[27643:473670] AGC release = 3
// USER dismisses the action sheet with tapping a button (delegate is nil)
12:56:53.257 SimplySolitaire[27643:473670] AGC retain == 4
12:56:53.257 SimplySolitaire[27643:473670] AGC retain == 5
12:56:53.258 SimplySolitaire[27643:473670] AGC retain == 6
12:56:53.258 SimplySolitaire[27643:473670] AGC retain == 7
12:56:53.258 SimplySolitaire[27643:473670] AGC release = 6
12:56:53.259 SimplySolitaire[27643:473670] AGC release = 5
12:56:53.612 SimplySolitaire[27643:473670] AGC release = 4
12:56:53.612 SimplySolitaire[27643:473670] AGC release = 3 // <<<<<<<<<< LEAK should be 2
// the last release is missing, but only iOS system code has executed.
iPad Retina Simulator iOS 8.1 UND echtes iPad, entlassen ohne LEAK
12:54:54.757 SimplySolitaire[27643:473670] >>> WILL actionSheet showInView: retain = 2
12:54:54.758 SimplySolitaire[27643:473670] AGC retain == 3
12:54:54.798 SimplySolitaire[27643:473670] AGC retain == 4
12:54:54.798 SimplySolitaire[27643:473670] AGC retain == 5
12:54:54.798 SimplySolitaire[27643:473670] AGC retain == 6
12:54:54.798 SimplySolitaire[27643:473670] <<< DID actionSheet showInView: retain = 6
12:54:54.845 SimplySolitaire[27643:473670] AGC release = 5
12:54:54.891 SimplySolitaire[27643:473670] AGC release = 4
12:54:54.891 SimplySolitaire[27643:473670] AGC release = 3
// NOW ... dismiss the action sheet without selection (delegate is nil)
12:55:05.643 SimplySolitaire[27643:473670] AGC retain == 4
12:55:05.644 SimplySolitaire[27643:473670] AGC retain == 5
12:55:05.644 SimplySolitaire[27643:473670] AGC retain == 6
12:55:05.644 SimplySolitaire[27643:473670] AGC retain == 7
12:55:05.645 SimplySolitaire[27643:473670] AGC release = 6
12:55:05.645 SimplySolitaire[27643:473670] AGC release = 5
12:55:05.996 SimplySolitaire[27643:473670] AGC release = 4
12:55:05.997 SimplySolitaire[27643:473670] AGC release = 3
12:55:05.997 SimplySolitaire[27643:473670] AGC release = 2 // this is a correct retain of 2
Ich würde vorschlagen, zu UIAlertController zu wechseln. UIActionSheet ist in iOS 8 veraltet, also könnten Sie versuchen, es zu versuchen und sehen, ob es immer noch das Leck
gibtTags und Links memory-leaks ios ios8 uialertcontroller uiactionsheet