ios – UIPageViewController并删除当前视图控制器

ios – UIPageViewController并删除当前视图控制器,第1张

概述我设置UIPageViewController来前进和后退一些视图控制器.我有一个问题,当视图控制器添加到UIPageViewController时,内存使用量将增加,直到编译器给我收到内存警告,然后应用程序运行太慢,直到应用程序清空内存并再次正常工作.如何在不增加内存的情况下浏览视图控制器?或者更好地说当新的on添加时如何删除当前视图控制器.这是我的代码: // Create the page 我设置UIPageVIEwController来前进和后退一些视图控制器.我有一个问题,当视图控制器添加到UIPageVIEwController时,内存使用量将增加,直到编译器给我收到内存警告,然后应用程序运行太慢,直到应用程序清空内存并再次正常工作.如何在不增加内存的情况下浏览视图控制器?或者更好地说当新的on添加时如何删除当前视图控制器.这是我的代码:

// 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并删除当前视图控制器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1052231.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存