Jay*_*hao 9 memory-leaks uipageviewcontroller
似乎UIPageViewController永远保存着初始内容视图控制器.例如:
DataViewController *startingViewController = [self.modelController viewControllerAtIndex:0 storyboard:self.storyboard];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
self.pageViewController.dataSource = self.modelController;
Run Code Online (Sandbox Code Playgroud)
该startingViewController永远不会释放,直到pageViewController它本身释放.
要重现此错误,只需使用基于页面的应用程序模板在XCode中创建一个新项目.并在DataViewController.m中添加3行代码
@property NSInteger debugIndex; // file scope
NSLog(@"DataViewController[%d] created", self.debugIndex); // in viewDidLoad
NSLog(@"DataViewController[%d] dealloc", self.debugIndex); // in dealloc
Run Code Online (Sandbox Code Playgroud)
当您以垂直方向滚动演示应用程序时,您将获得如下日志:
DataViewController[0] created
DataViewController[1] created
DataViewController[2] created
DataViewController[1] dealloc
DataViewController[3] created
DataViewController[2] dealloc
DataViewController[4] created
DataViewController[3] dealloc
DataViewController[5] created
DataViewController[4] dealloc
DataViewController[6] created
DataViewController[5] dealloc
Run Code Online (Sandbox Code Playgroud)
DataViewController [0]永远不会被释放.
有关于此的任何想法?谢谢!
您正在使用transitionStyle UIPageViewControllerTransitionStyleScroll吗?我遇到了相同或相似的问题,当改用页面卷曲动画时,该问题似乎消失了。
这个问题对我来说更加复杂,因为我允许UISliderBar设置内容中的位置。因此,在更改UISliderBar时,我正在调用setViewControllers:direction:animated:completion :,这导致越来越多的视图控制器引用在我的UIPageViewController中“卡住”。
我也在使用ARC。我还没有找到一种强迫UIPageViewController放开多余的视图控制器引用的可接受方法。我可能要么使用页面卷曲过渡,要么使用启用了页面调度的UIScrollView来实现自己的UIPageViewController等效项,这样我就可以管理自己的视图控制器缓存,而不必依赖UIPageViewController损坏的视图控制器管理。
| 归档时间: |
|
| 查看次数: |
3383 次 |
| 最近记录: |