gpt4 book ai didi

iphone - 页面 View Controller : How to release ViewControllers added to it?

转载 作者:搜寻专家 更新时间:2023-10-30 20:11:18 26 4
gpt4 key购买 nike

我对新的 PageViewController(具有漂亮的翻页动画的 Controller )有疑问。据我了解,您需要像这样设置一堆 ViewController:

PageView *startingViewController = [self.modelController viewControllerAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObject:startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];

到目前为止一切顺利。然后你需要设置一个源(你的模型 Controller )。在您的模型 Controller 中,您需要有四种方法:

-(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 在哪里结束以及如何释放它?我猜自动释放是个坏主意,因为我不知道需要多长时间。如果它最终进入堆栈(我猜是这样),需要多长时间?当然只是接下来的几页。例如,想象一下为第 1 页设置一个 pView。然后你转到第 2 页和第 3 页。到那时你不再需要第 1 页了——你可以释放它。如果您返回第 1 页,它将重新加载。

我在我的 pView dealloc 中放置了日志命令,但它从未被调用过。所以我想我正在泄露我创建的每一个 viewControllers。

一旦不再需要它们,是否知道如何以及在何处释放它们?

最佳答案

autorelease 正是您所需要的。这是设计 autorelease 的完美情况,即您需要返回一个对象,但不知道需要多长时间。

PageView *pView = [[PageView alloc] init] autorelease];
return pView;

您的 PageView 实例分配在堆上(而不是堆栈),PageViewController 将取得它的所有权并在需要时保留它。在您的方法返回后,它将成为 PageViewController 的责任。

(否则只需使用 ARC 并让编译器处理)

关于iphone - 页面 View Controller : How to release ViewControllers added to it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com