【发布时间】:2011-10-28 20:07:45
【问题描述】:
我对新的 PageViewController(具有漂亮翻页动画的那个)有疑问。据我了解,您需要像这样设置一堆 ViewController:
PageView *startingViewController = [self.modelController viewControllerAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObject:startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
到目前为止一切顺利。然后你需要设置一个源(你的模型控制器)。在你的模型控制器中,你需要有四个方法:
-(PageView *)viewControllerAtIndex:(NSUInteger)index
-(NSUInteger)indexOfViewController:(PageView *)viewController
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
如果您翻页(到下一页或上一页),则会调用最后两个。第二个简单地确定页面索引号。有趣的是——也是我的问题所在——是第一个。第一个返回一个 ViewController(在我的示例中称为 PageView)。这是方法的最后:
PageView *pView = [[PageView alloc] init];
return pView;
我想知道这个 pView 在哪里结束以及如何释放它?我想 autorelease 是个坏主意,因为我不知道需要多长时间。如果它最终在堆栈中(我猜它确实如此),它需要多长时间?当然只是接下来的几页。例如,想象为第 1 页设置一个 pView。然后您转到第 2 页和第 3 页。到那时您不再需要第 1 页 - 您可以释放它。如果您返回到第 1 页,它将被重新加载。
我将日志命令放在我的 pView dealloc 中,但它从未被调用。所以我想我会泄露我创建的每一个视图控制器。
有什么想法可以在不再需要它们时如何以及在何处释放它们?
【问题讨论】:
标签: iphone objective-c cocoa-touch uiviewcontroller ios5