UIViewController切换问题 现在有这样一个需求:A 可以切换到 B,B 也可以切换到 A。但是在连续切换过程中会产生多个A和多个B。导致内存持续增长。问题:如何在切换过程中销毁多余的A和多余的B, 或者在切换过程中不重复产生新的A和B。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1)用NavigationA push BB pop A2)用模态A present BB dimiss A3)用container viewControllerA addChild BA addChild CB..C之间的切换看自己定义吧。不知道是不是楼主想要的 创建成两个View吧 用那个显示那个 不用的隐藏 为了解决这个操蛋的问提。。我自个写了个控制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我觉得这是个临时的解决办法,不过用着还可以~~ 我用的arc~~如果能正确使用ARC,应该不会出现你所说的问题ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁 我用的arc~~如果能正确使用ARC,应该不会出现你所说的问题ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁present 的时候会产生一个新的UIViewController,而原先的UIViewController还是在栈之中,因为我们无法对栈进行操作,所以如果2个UIViewController不断present ,就会引起内存持续增长。 为什么要两个一直present。。present之后dismiss不就回到之前那个吗 需求指出这2个UIViewController要能相互切换。 用导航不能实现2个UIViewController相互切换的吧。。 需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了 需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了+50~ 需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了+50~嘿嘿 不过你自定义一个栈也可以啊,自己维护的东西好扩展 需求指出这2个UIViewController要能相互切换。互相切换的话把一个viewController作为container,然后添加两个childController,然后用transitionFromViewController:toViewController:duration:options:animations:completion:这个方法不就可以了+50~楼主给分撒 主动检测是否静音 跪求一份社区客户端的产品设计方案,和 服务器源码(最好能有微博功能) Round Rect Button 爲什麽不能設置 Set to Back 菜鸟求救命!!! 重金奖赏 使用 afnetworking 2.0.x 上传 照片至 .net webservice 接收 ios 上线审核 内支付 问题 [分享]XMIDI V1.1 ,一款IOS上的MIDI文件播放引擎 iOS开发兼顾图像处理 【iOS开发】我想让页面动起来!动起来!动起来!!! GCDAsyncSocket读取流被关闭的问题 mac地址,十万火急 NSUserDefaults
A push B
B pop A2)用模态
A present B
B dimiss A3)用container viewController
A addChild B
A addChild C
B..C之间的切换看自己定义吧。不知道是不是楼主想要的
代码如下:
@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
我觉得这是个临时的解决办法,不过用着还可以~~
如果能正确使用ARC,应该不会出现你所说的问题
ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则
ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁
如果能正确使用ARC,应该不会出现你所说的问题
ARC是程序在编译时提供自动内存管理的功能。在使用时我们要遵循它的一个基本原则
ARC的一个基本原则: 只要某个对象被任一strong指针引用,那么它将不会被销毁。当对象没有被任何strong指针引用时,那么就将被销毁
present 的时候会产生一个新的UIViewController,而原先的UIViewController还是在栈之中,因为我们无法对栈进行操作,所以如果2个UIViewController不断present ,就会引起内存持续增长。
+50~
+50~嘿嘿 不过你自定义一个栈也可以啊,自己维护的东西好扩展
+50~楼主给分撒