如何从 UIScrollView 卸载 UIViewController?

Posted

技术标签:

【中文标题】如何从 UIScrollView 卸载 UIViewController?【英文标题】:How do I unload a UIViewController from a UIScrollView? 【发布时间】:2011-04-29 14:49:32 【问题描述】:

我使用几乎相同的代码将我的 UIViewController(称为 LessonScrollView)加载到 UIScrollView 中。在scrollViewDidScroll方法中调用该方法

- (void)loadScrollViewWithPage:(int)page 

if (page < 0)
    return;
if (page >= numPages)
    return;

LessonScrollView *controller = [imageViewControllers objectAtIndex:page];
if ((NSNull *)controller == [NSNull null]) 
    controller = [[LessonScrollView alloc] initWithPage:page forLesson:[self title]];
    [imageViewControllers replaceObjectAtIndex:page withObject:controller];
    [controller release];


if (controller.view.superview == nil) 
    CGRect frame = CGRectMake(0, 80, 320, 285);
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    controller.view.frame = frame;
    [scrollView addSubview:controller.view];

在某些情况下,我相信有相当多的页面会保留在内存中,直到负责滚动视图的 UIViewController 被释放(或发生内存警告)。

我的问题是,我将如何释放 LessonScrollView 对象。我会调用一个方法,比如说

- (void)unloadScrollViewWithPage:(int)page 

在 scrollViewDidScroll 和 page 将是当前页面 - 1。

感谢您提供的任何帮助。

【问题讨论】:

【参考方案1】:

试试这个:

[controller.view removeFromSuperview];//to release the controller's view
[imageViewControllers replaceOjectAtIndex:page withObject:[NSNull null]];//to release the actual controller which should lead to it being dealocated

【讨论】:

以上是关于如何从 UIScrollView 卸载 UIViewController?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 [UIScrollView removeFromSuperview] 崩溃了?

带有可重用项目的 UIScrollView

UIScrollView+UIView 而不是 UITableView+customcells?

如何从 uiscrollview 中的点击位置获取 UITOUCH?

如何从 UIScrollView 获取 UIButton 位置

如何从 UIScrollView 内的 UIButton 传递延迟滚动手势?