I am setting up a UIPageViewController to move forward and backward through some view controllers. I have a problem where the view controller adds to the UIPageViewController , the memory usage will increase until the compiler gives me a Received memory warning , and then the application will start too slowly until the application empties the memory and stops working again. How can I navigate view controllers without increasing the amount of memory? or better say how to remove the current view controller when a new one is added. here is my code:
// Create the page view controller. self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"]; self.pageViewController.dataSource = self; //disabling tap and swipe guesture for (UIGestureRecognizer *recognizer in self.pageViewController.gestureRecognizers) { recognizer.enabled = NO; } // Instantiate the first view controller. UIViewController *startingViewController = [self viewControllerAtIndex:0]; [self.pageViewController setViewControllers:@[startingViewController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:^(BOOL finished) { // Completion code }]; // Add the page view controller to this root view controller. [self addChildViewController:self.pageViewController]; [self.view addSubview:self.pageViewController.view]; [self.pageViewController didMoveToParentViewController:self];
Forward and backward:
- (void)goToPreviousContentViewController { // Get index of current view controller UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0]; NSString *vcRestorationID = currentViewController.restorationIdentifier; NSUInteger index = [self.contentPageRestorationIDs indexOfObject:vcRestorationID]; UIViewController *previousViewController = [self viewControllerAtIndex:index - 1]; [self.pageViewController setViewControllers:@[previousViewController] direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:^(BOOL finished) { // Completion code }]; }
Additional codes:
#pragma mark - UIPageViewControllerDataSource - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { return self.contentPageRestorationIDs.count; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSString *vcRestorationID = viewController.restorationIdentifier; NSUInteger index = [self.contentPageRestorationIDs indexOfObject:vcRestorationID]; if (index == 0) { return nil; } return [self viewControllerAtIndex:index - 1]; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { NSString *vcRestorationID = viewController.restorationIdentifier; NSUInteger index = [self.contentPageRestorationIDs indexOfObject:vcRestorationID]; if (index == self.contentPageRestorationIDs.count - 1) { return nil; } return [self viewControllerAtIndex:index + 1]; }
source share