Nicht verwendete Seiten in UIPageViewController freigeben

Ich benutze ein separates.h, .m, und.xib Dateien für jedenUIViewController basierte Seite von aUIPageViewController Bilderbuch. Jede Seite ist mit Animationen, Musik usw. geladen und benötigt ca. 4 MB Speicher. In Instruments sinkt der freie Speicher beim Laden jeder Seite um ca. 4 MB. Dieser Speicher wird niemals freigegeben, wenn die Seiten umgedreht werden. Es gibt schließlich Speicherwarnungen.UIPageViewController scheint jede Seite, die es instanziiert, im Speicher zu behalten und sie nicht zu entladen. Wenn also Seiten schnell umblättern, stürzt die App ab.

Ich möchte in der Lage sein, alle Seiten mit Ausnahme der 3 zu entladen, die von benötigt werdenUIPageViewController - die vorherige, aktuelle und nächste Seite. Wie kann ich unerwünschte Seiten entladen, seit sie von instanziiert wurden?UIPageViewController.

Unten ist das Array der Seiten, dieUIPageViewController zieht aus. Alle Seiten (Seite 1, Seite 2 usw.) laden im Grunde genommen nur Bilddateien, bieten grundlegende Animationen und enthalten Musik.

    //ARRAY OF PAGES    
pageArray = [[NSArray alloc] initWithObjects:
        (id)[[Page1 alloc] initWithNibName:nil bundle:nil],
            [[Page2 alloc] initWithNibName:nil bundle:nil],    
            [[Page3 alloc] initWithNibName:nil bundle:nil],    
            [[Page4 alloc] initWithNibName:nil bundle:nil],    
            [[Page5 alloc] initWithNibName:nil bundle:nil],    
            [[Page6 alloc] initWithNibName:nil bundle:nil], 
            [[Page7 alloc] initWithNibName:nil bundle:nil],
            [[Page8 alloc] initWithNibName:nil bundle:nil],
             // continues all the way up to page 47
             [[Page47 alloc] initWithNibName:nil bundle:nil],
             nil];

Ich habe die Standardinitialisierung für ausgelassenUIPageViewController. Es verwendet "nextPageNumber", um die richtige Seite aus der Liste zu ziehenpageArray oben, um ein neues Seitenobjekt zu erstellen.

-(void)turnPageForward{

[pageController setViewControllers:[NSArray arrayWithObject:[pageArray objectAtIndex:nextPageNumber]]
                         direction:UIPageViewControllerNavigationDirectionForward
                          animated:YES completion:^(BOOL finished){
                          }];

}

Ich habe versucht, ein Objekt zu erstellen. "pageIndexmsgstr "" "(siehe unten), der auf" "gesetzt ist, nachdem er an diepageController. Es hat nicht funktioniert. Die Seite nahm noch viel Speicherplatz in Anspruch, nachdem die Seiten vorgerückt waren.

//PROGRAM PAGE FORWARD

- (nichtig) turnPageForward {

UIViewController * pageIndex =[pageArray objectAtIndex:nextPageNumber];  //nextPageNumber is the next page to load

[pageController setViewControllers:[NSArray arrayWithObject:pageIndex]
                         direction:UIPageViewControllerNavigationDirectionForward 
                          animated:YES completion:^(BOOL finished){
                          }];                                  
pageIndex = nil;                            

}

Ich habe den Stapelüberlauf nach Posts durchsucht, und zwar auf dieselbe Weise, wie Seiten an bereitgestellt werdenUIPageViewController, habe aber noch nichts in der Nähe gefunden. Der nächste war "ARC gibt den Speicher nicht frei, wenn der Navigationscontroller "zurück" wechseltmsgstr "aber setzt die View Controller nicht auf die gleiche Weise.

Ich habe versucht, die unerwünschten Seiten auf Null zu setzen, damit ARC sie ohne Glück entfernen kann. Irgendwelche Vorschläge oder alternative Wege, die ich ausprobieren sollte? Ich mag den Seitenrotationseffekt und konnte an keiner anderen Stelle einen guten finden, der horizontale Seitenrotationen ausführt.

Vielen Dank! Eric

Antworten auf die Frage(3)

Ihre Antwort auf die Frage