8

Ho due UIViewControllers con pulsanti che attivano i passaggi (modali) l'uno verso l'altro. Volevo scoprire se questo ha causato perdite di memoria mentre saltavo avanti e indietro e vedo che la memoria allocata all'oggetto Living & & sta aumentando, e che alla fine avrebbe lasciato l'app. Non ho una singola riga di codice, che funziona con pure UIViewControllers. storyboardLa storyboard prosegue causando perdite di memoria

profiler 1

profiler 2 project's settings

Quello che potrebbe essere sbagliato?
Potrei aver impostato qualcosa di sbagliato nelle impostazioni del progetto?
Sto leggendo male la staticizzazione del profiler?
Devo eseguire qualche comando di rilascio speciale mentre lavoro con segues?

risposta

13

Non si stanno utilizzando correttamente i passaggi modali. Il modo in cui l'hai implementato, stai creando una nuova istanza di ciascun controller di visualizzazione quando segui invece di tornare all'istanza da cui provieni. Questo è il motivo per cui l'utilizzo della memoria continua ad aumentare.

Prima iOS 6, il modo corretto per gestire questa era di:

1) definiscono un metodo come viewController2Done in vista del regolatore 1
2) in vista del regolatore 2, creare una proprietà denominata delegate di tipo id .
3) in prepareToSegue di vista del regolatore 1, impostare delegate in vista del regolatore 2 di self
4) in vista del regolatore 2, quando è il momento di tornare alla vista del regolatore 1, chiamare [delegate viewController2Done]
5) in viewController2Done chiamata [self dismissModalViewControllerAnimated:YES]

Questo metodo funziona ancora in iOS 6, ma è disponibile anche un nuovo unwind segue. Per usarlo, si potrebbe definire un metodo nella controller di vista 1 in questo modo:

Objective-C:

- (IBAction)unwindFromViewController2:(UIStoryboardSegue *)segue 
{ 
    NSLog(@"and we are back"); 
} 

Swift:

@IBAction func unwindFromViewController2(segue: UIStoryboardSegue) { 
    print("and we are back") 
} 

allora si sarebbe controllo trascinare dal pulsante nel controller di visualizzazione 2 all'icona di uscita arancione nella barra sopra il controller di visualizzazione nello Storyboard. Nel pop-up, dovresti selezionare unwindFromViewController2 e voilà, il gioco è fatto.

enter image description here

+0

OMG, sono sciocco. Grazie! – Piotr