现在有这样一个需求:
A 可以切换到 B,
B 也可以切换到 A。
但是在连续切换过程中会产生多个A和多个B。导致内存持续增长。问题:如何在切换过程中销毁多余的A和多余的B, 或者在切换过程中不重复产生新的A和B。

解决方案 »

  1.   

    1)用Navigation
    A push B
    B pop A2)用模态
    A present B
    B dimiss A3)用container viewController
    A addChild B
    A addChild C
    B..C之间的切换看自己定义吧。不知道是不是楼主想要的
      

  2.   

    创建成两个View吧 用那个显示那个 不用的隐藏
      

  3.   

    为了解决这个操蛋的问提。。我自个写了个控制UiViewController 栈的控制器
    代码如下:
    @interface WindowStack : NSObject{
        UIViewController * _root;
        NSMutableArray * _stack;
    }
    -(id)initWidthRootView:(UIViewController *)root;
    -(void)push:(UIViewController *) controller isClearStack:(BOOL)isClearStack;
    -(void)pop;
    @end@implementation WindowStack
    -(id)initWidthRootView:(UIViewController *)root{
        _root = root;
        _stack = [[NSMutableArray alloc] initWithCapacity:5];
        [_stack addObject:root];
        return [super init];
    }
    -(void)push:(UIViewController *) controller isClearStack:(BOOL)isClearStack{
        if (isClearStack) {
            while (_stack.count > 1) {
                [self pop];
            }
        }
        
        [[_stack objectAtIndex:_stack.count - 1] presentViewController:controller animated:YES completion:nil];
        [_stack addObject:controller];
    }
    -(void)pop{
        if (_stack.count > 1) {
            UIViewController * controller = [_stack objectAtIndex:_stack.count - 1];
            [controller dismissViewControllerAnimated:NO completion:nil];
            [controller.view removeFromSuperview];
            [_stack removeObject:controller];
        }
    }
    @end
    我觉得这是个临时的解决办法,不过用着还可以~~
      

  4.   

    我用的arc~~
    如果能正确使用ARC,应该不会出现你所说的问题
    ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则
    ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁
      

  5.   

    我用的arc~~
    如果能正确使用ARC,应该不会出现你所说的问题
    ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则
    ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁
    present 的时候会产生一个新的UIViewController,而原先的UIViewController还是在栈之中,因为我们无法对栈进行操作,所以如果2个UIViewController不断present ,就会引起内存持续增长。
      

  6.   

    为什么要两个一直present。。present之后dismiss不就回到之前那个吗
      

  7.   

    需求指出这2个UIViewController要能相互切换。
      

  8.   

    用导航不能实现2个UIViewController相互切换的吧。。
      

  9.   

    需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了
      

  10.   

    需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了
    +50~
      

  11.   

    需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了
    +50~嘿嘿 不过你自定义一个栈也可以啊,自己维护的东西好扩展
      

  12.   

    需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了
    +50~楼主给分撒