
// Create the page vIEw controller.self.pageVIEwController = [self.storyboard instantiateVIEwControllerWithIDentifIEr:@"PageVIEwController"];self.pageVIEwController.dataSource = self;//disabling tap and swipe guesturefor (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]; 前进和后退行动:
- (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 }];} 更多代码:
#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];}#pragma mark - Private Methods- (UIVIEwController *)vIEwControllerAtIndex:(NSUInteger)index{ // Only process a valID index request. if (index >= self.contentPageRestorationIDs.count) { return nil; } // Create a new vIEw controller. BaseContentVIEwController *contentVIEwController = (BaseContentVIEwController *)[self.storyboard instantiateVIEwControllerWithIDentifIEr:self.contentPageRestorationIDs[index]]; // Set any data needed by the VC here contentVIEwController.rootVIEwController = self; return contentVIEwController;}解决方法 回答你的问题 >“如何在不增加内存的情况下浏览视图控制器?”:
你真的不能这样做.加载新的视图控制器时,它将加载所有视图,视图控制器存储在内存中.您无法加载和显示不在内存中的视图控制器.
>“如何在新的on添加时删除当前视图控制器”:
你不应该这样做.空视图控制器没有很大的内存占用,您可以在导航堆栈中轻松拥有20个视图控制器,而不会出现任何内存问题.虽然可以实现这样的东西,但它需要做很多工作,并且它无法解决问题的根源.
那有什么问题呢?
您有内存管理问题.它不是由您发布的代码引起的,看起来很好.问题必须出在代码的另一部分.
有两种常见情况可能导致内存管理问题:
>保留周期:
保留周期基本上是两个对象相互保留的时间.这违反了对象所有权的标准规则,使两个对象无权释放另一个,导致内存泄漏(数字是保留计数):
>不必要的缓存:如果您正在下载大量不同的图像并对其进行缓存,那么这不是缓存的理想用例.缓存是存储频繁访问的对象的理想选择.如果您不经常访问这些图像或收到dIDReceiveMemoryWarning消息,则应释放这些对象.
你如何调试内存问题
第一个也是最简单的事情就是覆盖视图控制器的dealloc方法.覆盖vIEwcontroller上的dealloc方法将有助于确保在您期望的情况下释放视图控件.
-(voID)dealloc { NSLog(@"vIEwcontroller is being deallocated"); } 如果这没有帮助,您可以尝试隔离问题并使用Xcode Instruments进行调试. This篇文章对你来说是个不错的开始.
总结以上是内存溢出为你收集整理的ios – UIPageViewController并删除当前视图控制器全部内容,希望文章能够帮你解决ios – UIPageViewController并删除当前视图控制器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)