ios - 如何释放 View Controller 数组中的 View Controller ?

标签 ios memory-management viewcontroller

我在内存管理方面遇到问题。 A 有一个 ScrollView ,其中的每个页面都从 View Controller 数组加载。 我调用以下方法加载 scrollview 页面:

- (void)loadScrollViewWithPage:(int)page {

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


    BancaTableViewController *controller = [viewControllers objectAtIndex:page];


    if ((NSNull *)controller == [NSNull null]) {

        controller=[[BancaTableViewController alloc] initWithPageNumber:page];
        controller.banks=banks;
        [controllersetDelegate:self];
        [viewControllers replaceObjectAtIndex:page withObject:controller];
        [controller release];
    }

    // add the controller's view to the scroll view
    if (nil == controller.view.superview) {
        CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0;
        controller.view.frame = frame;
        [scrollView addSubview:controller.view];
    }


}

这是我的卸载 View Controller 方法,它卸载除当前页面的 Controller 之外的所有 Controller ,但它似乎不起作用,因为内存不断增加。

- (void)unloadScrollViewWithPage:(int)page {
    for (unsigned i = 0; i < kNumberOfPages; i++) {
      if(i!=page){
       [viewControllers replaceObjectAtIndex:i withObject:[NSNull null]];
      }
    }
}

如何正确编写unloadviewcontroller?

最佳答案

您正在向scrollView添加一个硬指针,但您从未删除该对象。 (即,您不断向 ScrollView 添加 subview 并且从不删除它们。

[scrollView addSubview:controller.view];

试试这个...

将标签添加到您的 Controller View 中,然后将其添加到 ScrollView 中,然后在加载新 Controller 之前将其删除。检查语法 - 从内存中 - 未测试

if ((NSNull *)controller == [NSNull null]) {

    controller=[[BancaTableViewController alloc] initWithPageNumber:page];
    controller.banks=banks;
    controller.tag = 3;
    [controllersetDelegate:self];
    [viewControllers replaceObjectAtIndex:page withObject:controller];
    [controller release];
}

// add the controller's view to the scroll view
if (nil == controller.view.superview) {
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    controller.view.frame = frame;
    [scrollView removeFromView:[scrollView viewWithTag:3]];
    [scrollView addSubview:controller.view];
}

关于ios - 如何释放 View Controller 数组中的 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238811/

相关文章:

c - 如何修复内存泄漏?

swift - 在看到按钮之前发生滑动操作 - Swift 编码

ios - UIView 中的圆角 : CALayer or background Image?

ios - 仅在键盘上显示字母(禁用数字和标点符号)

iphone - UrbanAirship/推送通知注册 : NSURLErrorDomain: bad url

linux - 为什么 TOP 命令的详细列表中列出的 SWAP 大于摘要中的?

android - 如何在 React Native 中更改 TextInput 占位符的样式?

.net - .NET 中奇怪的数组内存管理

ios - 无法通过 UIAlert 中的闭包关闭 View Controller

iOS 以编程方式从 View Controller 设置 View 变量