UIPageViewController Speicherleck

8

Es scheint, dass UIPageViewController den ursprünglichen Inhaltsansicht-Controller für immer hält. Zum Beispiel:

%Vor%

Der startendeViewController wird erst freigegeben, wenn der PageViewController selbst freigegeben wurde.

Um diesen Fehler zu reproduzieren, erstellen Sie einfach ein neues Projekt in XCode mit der Vorlage für seitenbasierte Anwendungen. Und fügen Sie 3 Zeilen Code in DataViewController.m

hinzu %Vor%

Wenn Sie die Demo-App in vertikaler Ausrichtung scrollen, erhalten Sie Protokolle wie folgt:

%Vor%

DataViewController [0] wird nie freigegeben.

Irgendwelche Ideen dazu? Danke!

    
Jay Zhao 01.03.2013, 11:07
quelle

5 Antworten

3

Verwenden Sie transitionStyle UIPageViewControllerTransitionStyleScroll? Ich stieß auf das gleiche oder ein ähnliches Problem, das bei der Verwendung von Page-Curl-Animationen zu verschwinden schien.

Das Problem wurde für mich komplizierter, weil ich einer UISliderBar erlaubte, die Position im Inhalt festzulegen. Also habe ich beim Ändern der UISliderBar setViewControllers aufgerufen: direction: animated: completion: was mehr und mehr View-Controller-Referenzen dazu brachte, in meinem UIPageViewController "hängen zu bleiben".

Ich benutze auch ARC. Ich habe keinen akzeptablen Weg gefunden, den UIPageViewController dazu zu zwingen, die zusätzlichen View-Controller-Referenzen loszulassen. Ich werde wahrscheinlich entweder den Seiten-Curl-Übergang verwenden oder mein eigenes UIPageViewController-Äquivalent implementieren, indem ich ein UIScrollView mit aktiviertem Paging benutze, damit ich meinen eigenen View-Controller-Cache verwalten kann, anstatt auf die Verwaltung des gebrochenen View-Controllers von UIPageViewController zu vertrauen.

    
mwu 06.12.2013 19:47
quelle
3

Ich bin mir nicht sicher, ob Sie das Problem noch haben, aber ich hatte das gleiche Problem und ich fand die Lösung.

Ich kenne den Grund nicht, aber es funktioniert.

Ich setze den ersten viewController direkt nach addSubview und nicht vor addChlidViewController .

%Vor%

und der erste viewController wird zur richtigen Zeit die Zuordnung aufheben.

auch, ich habe gefunden, wenn

anrufen %Vor%

vor addSubView und der Abschlussblock wird nicht aufgerufen.

und ich denke, dieser Block ist der Grund, warum der erste ViewController nicht dealloc.

Ich werde herausfinden, warum es nicht Rückruf, und die Antwort verbessern ~

Prost

    
specialvict 23.07.2015 09:35
quelle
1

Nach ein paar Versuchen, herauszufinden, was bei einem ähnlichen Problem passierte, bemerkte ich, dass es in meinem Projekt zwei Gründe gab, die ein Retain-Problem verursachten und dazu führten, dass ein UIPageViewController für immer beibehalten wurde.

1) Zwischen dem UIPageViewController und dem UIViewcontroller wurde ein zirkulärer Verweis angezeigt (dies wurde behoben, indem die Eigenschaften in beiden Klassen von schwach auf stark geändert wurden)

2) und das Hauptproblem bestand darin,

zu ändern %Vor%

bis

%Vor%

Ich hoffe, das hilft jemandem

    
Andrei Durnea 26.08.2016 13:19
quelle
0

das gleiche Problem hier Ich löste es, indem ich meine anfängliche ViewController in der Variablen behielt und anstatt die selbe vc auf einem bestimmten pageIndex zu erstellen, benutze ich sie einfach wieder

    
Adam Smaka 10.12.2016 13:33
quelle
-1

Ich hatte dasselbe Problem und löste folgendes:

[startingViewController release]; wo der Endpunkt der Initialisierung.

dann wird der erste ViewController freigegeben.

    
user2380333 07.06.2013 08:28
quelle