UIViewController切换问题

meichen8050753 2013-10-28 04:25:47
现在有这样一个需求:
A 可以切换到 B,
B 也可以切换到 A。
但是在连续切换过程中会产生多个A和多个B。导致内存持续增长。

问题:如何在切换过程中销毁多余的A和多余的B, 或者在切换过程中不重复产生新的A和B。

...全文
367 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
小杨在玩iOS 2013-10-31
  • 打赏
  • 举报
回复
引用 14 楼 meichen8050753 的回复:
[quote=引用 13 楼 yang8456211 的回复:] [quote=引用 11 楼 meichen8050753 的回复:] [quote=引用 10 楼 yang8456211 的回复:] 为什么要两个一直present。。present之后dismiss不就回到之前那个吗
需求指出这2个UIViewController要能相互切换。[/quote] 互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了。。。[/quote] +50~[/quote] 嘿嘿 不过你自定义一个栈也可以啊,自己维护的东西好扩展
meichen8050753 2013-10-31
  • 打赏
  • 举报
回复
引用 13 楼 yang8456211 的回复:
[quote=引用 11 楼 meichen8050753 的回复:] [quote=引用 10 楼 yang8456211 的回复:] 为什么要两个一直present。。present之后dismiss不就回到之前那个吗
需求指出这2个UIViewController要能相互切换。[/quote] 互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了。。。[/quote] +50~
小杨在玩iOS 2013-10-31
  • 打赏
  • 举报
回复
引用 14 楼 meichen8050753 的回复:
[quote=引用 13 楼 yang8456211 的回复:] [quote=引用 11 楼 meichen8050753 的回复:] [quote=引用 10 楼 yang8456211 的回复:] 为什么要两个一直present。。present之后dismiss不就回到之前那个吗
需求指出这2个UIViewController要能相互切换。[/quote] 互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了。。。[/quote] +50~[/quote] 楼主给分撒
meichen8050753 2013-10-30
  • 打赏
  • 举报
回复
引用 7 楼 zhanglei5415 的回复:
[quote=引用 6 楼 meichen8050753 的回复:] [quote=引用 3 楼 h98458 的回复:] push 后记得 release
我用的arc~~[/quote] 如果能正确使用ARC,应该不会出现你所说的问题 ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则 ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁[/quote] present 的时候会产生一个新的UIViewController,而原先的UIViewController还是在栈之中,因为我们无法对栈进行操作,所以如果2个UIViewController不断present ,就会引起内存持续增长。
ReyZhang 2013-10-30
  • 打赏
  • 举报
回复
引用 6 楼 meichen8050753 的回复:
[quote=引用 3 楼 h98458 的回复:] push 后记得 release
我用的arc~~[/quote] 如果能正确使用ARC,应该不会出现你所说的问题 ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则 ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁
小杨在玩iOS 2013-10-30
  • 打赏
  • 举报
回复
引用 11 楼 meichen8050753 的回复:
[quote=引用 10 楼 yang8456211 的回复:] 为什么要两个一直present。。present之后dismiss不就回到之前那个吗
需求指出这2个UIViewController要能相互切换。[/quote] 互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了。。。
meichen8050753 2013-10-30
  • 打赏
  • 举报
回复
引用 9 楼 u012626125 的回复:
导航栏........./////////////////////////
用导航不能实现2个UIViewController相互切换的吧。。
meichen8050753 2013-10-30
  • 打赏
  • 举报
回复
引用 10 楼 yang8456211 的回复:
为什么要两个一直present。。present之后dismiss不就回到之前那个吗
需求指出这2个UIViewController要能相互切换。
小杨在玩iOS 2013-10-30
  • 打赏
  • 举报
回复
为什么要两个一直present。。present之后dismiss不就回到之前那个吗
zxfcszdx 2013-10-30
  • 打赏
  • 举报
回复
导航栏........./////////////////////////
h98458 2013-10-29
  • 打赏
  • 举报
回复
push 后记得 release
meichen8050753 2013-10-29
  • 打赏
  • 举报
回复
引用 3 楼 h98458 的回复:
push 后记得 release
我用的arc~~
meichen8050753 2013-10-29
  • 打赏
  • 举报
回复
为了解决这个操蛋的问提。。我自个写了个控制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
我觉得这是个临时的解决办法,不过用着还可以~~
半瓶子咣当 2013-10-29
  • 打赏
  • 举报
回复
创建成两个View吧 用那个显示那个 不用的隐藏
小杨在玩iOS 2013-10-28
  • 打赏
  • 举报
回复
1)用Navigation A push B B pop A 2)用模态 A present B B dimiss A 3)用container viewController A addChild B A addChild C B..C之间的切换看自己定义吧。 不知道是不是楼主想要的

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧