Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在presentViewController之后,ios arc迁移了项目内存清理_Ios_Memory Management_Automatic Ref Counting_Presentmodalviewcontroller - Fatal编程技术网

在presentViewController之后,ios arc迁移了项目内存清理

在presentViewController之后,ios arc迁移了项目内存清理,ios,memory-management,automatic-ref-counting,presentmodalviewcontroller,Ios,Memory Management,Automatic Ref Counting,Presentmodalviewcontroller,在我迁移到ARC后使用仪器,我意识到屏幕的转换并没有清理内存。 步骤示例: 1) 主屏幕A->游戏屏幕B=内存使用率上升 2) 游戏结束,我从屏幕B回到主屏幕A 对于步骤2,内存使用率不会降低。我希望在从屏幕中删除屏幕B时释放屏幕B占用的内存。。。我该怎么做才能确保这种自由发生 从A到B: GameVC_iPad*game=[[GameVC_iPad alloc]initWithNibName:@“ClassicGameVC_iPad”bundle:nil]; [自我呈现视图控制器:游戏动画:是

在我迁移到ARC后使用仪器,我意识到屏幕的转换并没有清理内存。 步骤示例:

1) 主屏幕A->游戏屏幕B=内存使用率上升 2) 游戏结束,我从屏幕B回到主屏幕A

对于步骤2,内存使用率不会降低。我希望在从屏幕中删除屏幕B时释放屏幕B占用的内存。。。我该怎么做才能确保这种自由发生

从A到B:

GameVC_iPad*game=[[GameVC_iPad alloc]initWithNibName:@“ClassicGameVC_iPad”bundle:nil]; [自我呈现视图控制器:游戏动画:是完成:无]

使用以下代码从B返回A:

HomeVC_iPad*home=[[HomeVC_iPad alloc]initWithNibName:@“HomeVC_iPad”捆绑包:nil]; home.modalTransitionStyle=uimodaltransitionstyle; [自我呈现视图控制器:家庭动画:是完成:无]


有什么线索吗?

当你回到一个地方时,你应该这样做

[self dismissModalViewControllerAnimated:YES];
您当前所做的是创建一个新的视图控制器,它是错误的,请下次再导航到它,所以这就是正在发生的事情

A送B,然后你送一个新的A,然后送一个新的B,依此类推


还请注意,当您导航到新的viewController时,iOS会缓存一些视图数据,因此在返回之前和之后,您将永远无法实现完美的内存使用,

不要创建家庭控制器的新副本。使用
dismissViewControllerAnimated:completion:
返回到现有的类。

如果您为b创建了一个委托类,例如,您将其命名为BDelegate,并使a的ViewController符合该协议,那么您可以轻松地将希望b被删除的消息传递回a。例如,您可以创建:

b特使:

@protocol BDelegate <NSObject>

- (void)dismissViewB;

@end
快到了!现在在您的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;
然后,如果一切顺利,当您点击按钮或执行任何需要执行的操作以删除视图时,视图控制器A将为您关闭它:)


希望这对您有所帮助

您不是真的要返回,而是在现有的视图控制器上简单地显示另一个视图控制器。。。
[delegate dismissViewB];
NSObject<BDelegate> *delegate;
game.delegate = self