Storyboard-Übergänge verursachen Speicherlecks

8

Ich habe zwei UIViewControllers mit Schaltflächen, die sich gegenseitig (modal) auslösen. Ich wollte herausfinden, ob das irgendwelche Speicherlecks verursacht, während ich hin und her hüpfe, und ich sehe, dass Living Object & amp; & amp; Der zugewiesene Speicher steigt, was letztendlich zum Absturz der App führen würde. Ich habe keine einzige Codezeile - ich arbeite mit reinen UIViewControllern.

Was könnte ich falsch machen?
Könnte ich etwas in den Projekteinstellungen falsch gemacht haben?
Liest ich die Statistiken des Profilers schlecht?
Muss ich während der Arbeit mit Segues spezielle Release-Befehle geben?

    
Piotr 28.10.2012, 03:14
quelle

1 Antwort

13

Sie verwenden die modalen Übergänge nicht korrekt. Wie Sie es implementiert haben, erstellen Sie beim Übergang eine neue Instanz jedes View-Controllers, anstatt zu der Instanz zurückzukehren, von der Sie gekommen sind. Aus diesem Grund erhöht sich die Speicherbelegung weiterhin.

Vor iOS 6 war der richtige Umgang damit:

1) Definieren Sie eine Methode wie viewController2Done im View-Controller 1
2) Erstellen Sie in View Controller 2 eine Eigenschaft mit dem Namen delegate vom Typ id .
3) in prepareToSegue für den View Controller 1, setzen Sie delegate im View Controller 2 auf self
4) Wenn Controller 2 aufgerufen wird, rufen Sie [delegate viewController2Done]
auf, wenn es Zeit ist, zum Anzeigen von Controller 1 zurückzukehren 5) in viewController2Done ruf [self dismissModalViewControllerAnimated:YES]

Diese Methode funktioniert immer noch in iOS 6, aber es gibt auch eine neue unwind segue , die stattdessen verwendet werden kann. Um es zu verwenden, würden Sie in Ihrem View-Controller 1 eine Methode wie folgt definieren:

Ziel-C:

%Vor%

Schnell:

%Vor%

Dann würden Sie den Mauszeiger über die Schaltfläche in View Controller 2 auf das orangefarbene Exit-Symbol in der Leiste über dem View-Controller im Storyboard ziehen. In der Pop-Up-Liste würden Sie unwindFromViewController2 und voila, Sie sind fertig.

    
vacawama 28.10.2012, 03:48
quelle