1)主屏幕A - >游戏画面B =内存使用量的上升 2)游戏结束,我从屏幕B回到主屏幕A
对于第2步,内存使用量不会降低。当屏幕B从屏幕上移除时,我想释放屏幕B消耗的内存......我应该怎样做才能确保这种释放发生?
从A到B:
GameVC_iPad * game = [[GameVC_iPad alloc] initWithNibName:@“ClassicGameVC_iPad”bundle:nil]; [self presentViewController:游戏动画:YES完成:nil];
使用此代码完成从B回到A:
HomeVC_iPad * home = [[HomeVC_iPad alloc] initWithNibName:@“HomeVC_iPad”bundle:nil]; home.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self presentViewController:home animated:YES completion:nil];
有任何线索吗?
答案 0 :(得分:2)
当你回到A时,你应该做
[self dismissModalViewControllerAnimated:YES];
你目前正在做的是创建一个错误的新视图控制器并再次导航到它,所以这就是正在发生的事情
A礼物B然后你呈现一个新的A,然后呈现一个新的B ans等等......
另请注意,当您导航到新的viewController iOS缓存一些视图数据时,您将无法在返回之前和之后实现完美的内存使用,
答案 1 :(得分:0)
不要创建家庭控制器的新副本。使用dismissViewControllerAnimated:completion:
返回现有帐户。
答案 2 :(得分:0)
如果你为b创建一个委托类,那么就举个例子你称它为BDelegate并使A的ViewController符合该协议,那么你就可以轻松地将一条消息传回给你想要删除B的A。例如,您可以创建:
BDelegate:
@protocol BDelegate <NSObject>
- (void)dismissViewB;
@end
然后将A(头文件)的视图控制器更改为:
@interface AViewController : UIViewController <BDelegate>
显然在那里使用视图控制器的实际名称。 在视图控制器A的主体中,添加以下方法
- (void)dismissViewB {
[self dismissViewControllerAnimated:YES completion:NULL];
}
几乎就在那里!现在在B视图控制器中,无论您想要实际删除视图,我都会假设您当前拥有
HomeVC_iPad *home = [[HomeVC_iPad alloc]initWithNibName:@"HomeVC_iPad" bundle:nil];
home.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:home animated:YES completion:nil];
将其替换为
[delegate dismissViewB];
现在你需要在视图控制器B内部的所有内容都是指向A的委托并指定它的实例变量。所以在控制器B的标题中添加类似
的内容NSObject<BDelegate> *delegate;
为它添加适当的@property,并在体内添加@synthesise。然后,当您在第一篇文章中创建视图控制器B时,只需添加
即可game.delegate = self
然后,如果一切顺利,当你点击按钮或做你需要做的任何事情来移除视图时,视图控制器A会为你解雇它:)
希望这有帮助