在我迁移到ARC之后使用仪器,我意识到从屏幕到屏幕的转换并不能清除内存。步骤示例:
1)主屏幕A ->游戏屏幕B=内存使用量的上升2)游戏完成,我从屏幕B返回主屏幕A
对于第二步,内存使用率不会降低。当从屏幕上删除屏幕B时,我希望释放屏幕B所消耗的内存.我该怎么做才能确保这种自由的发生?
从A到B:
GameVC_iPad *GameVC_iPad= [GameVC_iPad allocinitWithNibName:@"ClassicGameVC_iPad“bundle:nil];
从B返回A是使用以下代码完成的:
HomeVC_iPad *home = [HomeVC_iPad allocinitWithNibName:@"HomeVC_iPad“bundle:nil];home.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
有线索吗?
发布于 2012-06-17 14:42:37
当你回到A的时候,你应该做
[self dismissModalViewControllerAnimated:YES];您目前正在做的是创建一个新的视图控制器,这是错误的,并在另一个时间导航到它,所以这就是正在发生的事情。
A‘.
还请注意,当您导航到一个新的viewController iOS缓存一些视图数据时,您将永远无法在返回之前和之后实现完美的内存使用,
发布于 2012-06-17 14:43:04
不要创建家庭控制器的新副本。使用dismissViewControllerAnimated:completion:返回到现有的。
发布于 2012-06-26 10:53:20
如果您为b创建一个委托类,例如,您将其命名为BDelegate,并使A的ViewController符合该协议,那么您可以很容易地将一条消息传递回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;并为它添加适当的“属性”,并在主体中“合成”它。然后,当您在第一篇文章中创建视图控制器B时,只需添加
game.delegate = self如果一切顺利,当您点击按钮或做任何您需要做的事情来删除视图时,视图控制器A将为您关闭它:)
希望这能有所帮助
https://stackoverflow.com/questions/11072114
复制相似问题