Hallo,
ich habe bei meiner App wegen bestimmter Navigations-Anforderungen eine flexible Navigation programmiert, bei der es im InterfaceBuilder viele separate ViewController gibt, von denen Einer beim Wechsel im InitialViewController als ChildViewController hinzugefügt wird.
Beim Wechsel des ViewControllers wird anhand der Storyboard-ID ein neuer ViewController erzeugt, als ChildViewController zum InitialViewController hinzugefügt und der eigene (alte) ChildViewController vom InitialViewController entfernt. Der aktive ChildViewController ruft dazu beim Wechsel zu einem anderen ViewController über ein Delegate eine Methode im InitialViewController auf, die dann den neuen ChildViewController über den übergebenen Namen hinzugefügt und den alten ChildViewController direkt über den übergebenen Pointer entfernt. Beim Testen bzw. Navigieren habe ich nun bemerkt, dass der reservierte Speicher eines einmal aufgerufenen ChildViewControllers anscheinend nicht wieder freigegeben wird.
Auf folgende Weise wird im InitialViewController vom Prinzip her ein neuer ViewController angezeigt, wobei der Aufruf mit Übergabe der Parameter wie gesagt aus dem zuletzt hinzugefügten ChildViewController heraus erfolgt:
Alles anzeigen
In Instruments werden mir weder Leaks noch Zombies angezeigt, weswegen ich glaube, dass ich irgendwo Abandoned Memory oder etwas Ähnliches erzeuge. Der Speicherbedarf wächst nicht unendlich, sondern nur mit jedem zum ersten Mal aufgerufenen ViewController. Wenn ich jeden ViewController ein mal aufgerufen habe, benötigt die App aber insgesamt viel zu viel Speicher. Leider ist die Codebasis nicht so einfach zu durchschauen und ich komme mit Instruments nicht so richtig weiter - ich sehe zwar im Generation Snapshot, dass viele Grafiken mit identischer Größe den Speicher zumüllen, aber ich sehe da nur die Pointer und weiß so gar nicht, wo da jetzt genau das Problem liegt bzw. wie ich die Ursache für dieses Problem herausfinden kann?
Von daher wäre es sehr nett, wenn mir jemand einen Tipp geben könnte, wie man mit Instruments oder von mir aus auch mit anderen Methoden der Ursache für dieses Problem auf die Spur kommen kann.
Viele Grüße,
PanMar
ich habe bei meiner App wegen bestimmter Navigations-Anforderungen eine flexible Navigation programmiert, bei der es im InterfaceBuilder viele separate ViewController gibt, von denen Einer beim Wechsel im InitialViewController als ChildViewController hinzugefügt wird.
Beim Wechsel des ViewControllers wird anhand der Storyboard-ID ein neuer ViewController erzeugt, als ChildViewController zum InitialViewController hinzugefügt und der eigene (alte) ChildViewController vom InitialViewController entfernt. Der aktive ChildViewController ruft dazu beim Wechsel zu einem anderen ViewController über ein Delegate eine Methode im InitialViewController auf, die dann den neuen ChildViewController über den übergebenen Namen hinzugefügt und den alten ChildViewController direkt über den übergebenen Pointer entfernt. Beim Testen bzw. Navigieren habe ich nun bemerkt, dass der reservierte Speicher eines einmal aufgerufenen ChildViewControllers anscheinend nicht wieder freigegeben wird.
Auf folgende Weise wird im InitialViewController vom Prinzip her ein neuer ViewController angezeigt, wobei der Aufruf mit Übergabe der Parameter wie gesagt aus dem zuletzt hinzugefügten ChildViewController heraus erfolgt:
Quellcode
- - (void) wechselVonAltemVC:(UIViewController *)alterVC ZuVCName:(NSString *)neuerVCName
- {
- meinVC *neuerVC = [[self storyboard] instantiateViewControllerWithIdentifier:neuerVCName];
- [neuerVC setDelegate:self];
- [self addChildViewController:neuerVC];
- neuerVC.view.bounds = self.view.bounds;
- [self.view addSubview:neuerVC.view];
- [neuerVC didMoveToParentViewController:self];
- [alterVC willMoveToParentViewController:nil];
- [alterVC.view removeFromSuperview];
- [alterVC removeFromParentViewController];
- }
In Instruments werden mir weder Leaks noch Zombies angezeigt, weswegen ich glaube, dass ich irgendwo Abandoned Memory oder etwas Ähnliches erzeuge. Der Speicherbedarf wächst nicht unendlich, sondern nur mit jedem zum ersten Mal aufgerufenen ViewController. Wenn ich jeden ViewController ein mal aufgerufen habe, benötigt die App aber insgesamt viel zu viel Speicher. Leider ist die Codebasis nicht so einfach zu durchschauen und ich komme mit Instruments nicht so richtig weiter - ich sehe zwar im Generation Snapshot, dass viele Grafiken mit identischer Größe den Speicher zumüllen, aber ich sehe da nur die Pointer und weiß so gar nicht, wo da jetzt genau das Problem liegt bzw. wie ich die Ursache für dieses Problem herausfinden kann?
Von daher wäre es sehr nett, wenn mir jemand einen Tipp geben könnte, wie man mit Instruments oder von mir aus auch mit anderen Methoden der Ursache für dieses Problem auf die Spur kommen kann.
Viele Grüße,
PanMar